リモートサーバーの認証されたキーに公開キーを追加し、いくつかのコマンドを実行します。

リモートサーバーの認証されたキーに公開キーを追加し、いくつかのコマンドを実行します。

コマンド自体が機能します。

ssh user@remote 'cat >>/home/user/somedir/.ssh/authorized_keys' <~/.ssh/id_rsa.pub

だから私はこれを私のスクリプトに統合しようとしました。

#! /bin/bash

ssh user@remote 'cat >>/home/user/somedir/.ssh/authorized_keys' <~/.ssh/id_rsa.pub << EOF
    touch hello
    mkdir /test/morning
    cp hello /test/morning
EOF 

目的は、自分のファイルをローカルシステムからリモートホストにid_rsa.pubコピーし、別のコマンドを実行することです。ただし、上記のスクリプトを使用するコマンドは、次のようにauthorized_keysファイルにエコーされます。authorized_keys

$ cat /home/user/somedir/.ssh/authorized_keys 
    touch hello
    mkdir /test/morning
    cp hello /test/morning
EOF 

誰でも助けることができますか?

答え1

探しているようですが、

cat ~/.ssh/id_rsa.pub | ssh user@remote "mkdir /home/user/somedir/.ssh; \
cat >> /home/user/somedir/.ssh/authorized_keys; touch hello; mkdir /test/morning; \
cp hello /test/morning"

私は使用することを好みますssh-copy-id。リモートアドレスを指定すると、authorized_keysリモートシステムのファイルに公開鍵が追加されます。

$ ssh-copy-id user@remote

答え2

これここのドキュメント実行するコマンドの標準入力をリダイレクトします(sshこの場合)。リダイレクトにも同じです< file。リダイレクトは左から右に処理されるため、最後のリダイレクトが適用されます。したがって、 catリモートで実行し、ここのドキュメントから入力を取得します。

次のようなものを試してください

echo file > sourcefile
cat <<EOF <sourcefile 
here doc
EOF

次に、逆の順序でリダイレクトと比較します。

関連情報