質問: ディレクトリがまだ存在しない場合、sshを使用してリモートlinuxディレクトリ内のファイルにcatするにはどうすればよいですか? 公開id_rsa.pubファイルをmacからlinuxサーバーのホームディレクトリにある〜/ .ssh/authorized_keysディレクトリに送信しようとしています。毎回ログインしなくてもアクセスできます。macターミナルから次のコマンドを使用しています。cat ~/.ssh/id_rsa.pub | ssh username@remoteserver 'cat >> ~/.ssh/authorized_keys' これは、リモートの〜/ .sshディレクトリがすでに存在する場合は機能しますが、それ以外の場合は機能しません。その場合、最初にリモートサーバーにログインし、.sshディレクトリを作成してからログアウトしてから、上記のコマンドを実行する必要があります。その後、ログインせずにリモートサーバーにsshできます。数十台のサーバーでこれを行う必要があるので、リモートの.sshディレクトリがまだない場合に、上記のコマンドを変更してリモート.sshディレクトリを作成する方法があるかどうか疑問に思いました。おかげで、ダグ
回答: ssh-copy-idを使用一般に ssh-copy-id は存在しないディレクトリまたはファイルを処理します。使用する 可能な場合 ;ホイールを再発明しないでください。ssh-copy-idなし(何らかの理由で)リモート側では、シェルでコマンドを実行します。さらにコマンドを実行します。余分なコマンドがcatよりも前にstdinを消費しないことを確認してください(必要に応じて</dev/nullを使用してください)。ここでは、cdもmkdirもstdinを使用しないため、これは機能するはずです。cat ~/.ssh/id_rsa.pub | ssh username@remoteserver ' cd ~/ || exit mkdir -pm 700 .ssh cat >> .ssh/authorized_keys chmod 600 .ssh/authorized_keys ' ノート: -pは、./.sshがディレクトリとしてすでに存在する場合、mkdirに文句を言わないようにします。 -m 700は、最初から正しいモードを設定します。 コードを改善することができます。私の主なポイントは、単一のcatに限定されないことです。