ssh が ~/.ssh を生成しようとする試みをどのように停止しますか?

ssh が ~/.ssh を生成しようとする試みをどのように停止しますか?

FreeNASシステム用のrsyncベースのバックアップを開発しています。

バックアッププロセスの一部には、バックアップストアとして機能するリモートシステムにログインすることが含まれます。これを行うたびにメッセージが表示されます。

Could not create directory '/root/.ssh'.

/root手動で作成しようとすると、次のメッセージが受信されるため、~/.sshこれは読み取り専用であるためと仮定します。

mkdir: /root/.ssh: Read-only file system

したがって、known_hostsこのファイルは私にとってより適切なバックアッププロセスに移動し、-o UserKnownHostsFileそれに関連するすべての問題を解決するために使用されます。

しかし、私が呼び出すときにsshまだフォルダを作成しようとします。~/.sshフォルダを作成しないようにするにはどうすればよいですか?

ベストアンサー1

ここで言及されている解決策は問題ありませんが、〜/ .sshが存在しないか、またはそれを生成する必要がない解決策を探しています(Windows上で実行してMSYSベースのssh.exeを展開しますが、そうでない場合)。 MSYS/ Cygwin マシンのインストール)。

残念ながら、UserKnownHostsFileこのルーチンは、ユーザーがどの値を提供しても、ソースコードにハードコードされているようです。

    r = snprintf(buf, sizeof buf, "%s%s%s", pw->pw_dir,
        strcmp(pw->pw_dir, "/") ? "/" : "", _PATH_SSH_USER_DIR);
    if (r > 0 && (size_t)r < sizeof(buf) && stat(buf, &st) < 0) {
#ifdef WITH_SELINUX
        ssh_selinux_setfscreatecon(buf);
#endif
        if (mkdir(buf, 0700) < 0)
            error("Could not create directory '%.200s'.",
                buf);
#ifdef WITH_SELINUX
        ssh_selinux_setfscreatecon(NULL);
#endif
    }

しかし、興味深いことに、$HOMEホームディレクトリを決定するために環境変数を拡張しようとします。バッファは約256バイトなので、実際にバッファをオーバーフローして(HOMEを256バイトより長い文字列として定義)、if条件をバイパスすることができます。たとえば、次のようになります。

export HOME=$HOME/././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././.

おすすめ記事