SSHに接続した後、シェルコマンドを実行し続けます。

SSHに接続した後、シェルコマンドを実行し続けます。

私が質問するのが正しいかどうかはわかりませんが、基本的にこのプロセスを自動化したいと思います。

  scp ~/.ssh/id_rsa.pub [email protected]:~/
  ssh [email protected]
  mkdir .ssh
  cat id_rsa.pub >> .ssh/authorized_keys
  rm id_rsa.pub
  chmod go-w ~
  chmod 700 ~/.ssh
  chmod 600 ~/.ssh/authorized_keys

だから私はシェルスクリプトを作成して、次のように.bash_profileに入れることができると思いました。

setup_ssh () {
  scp ~/.ssh/id_rsa.pub $1:~/
  ssh $1
  #the following is happens when connected to the server using ssh
  mkdir .ssh
  cat id_rsa.pub >> .ssh/authorized_keys
  rm id_rsa.pub
  chmod go-w ~
  chmod 700 ~/.ssh
  chmod 600 ~/.ssh/authorized_keys
}

しかし、もちろん、これはサーバーに接続してもコマンドを実行し続けないため、機能しません。 SSHを介してサーバーに接続した後にコマンドを実行し続ける方法はありますか?

ベストアンサー1

以下は少し異なる作業方法です。

setup_ssh() {
  cat ~/.ssh/id_rsa.pub | ssh $1 '
    mkdir .ssh;
    cat >> .ssh/authorized_keys;
    chmod go-w .;
    chmod 700 .ssh;
    chmod 600 .ssh/authorized_keys
  '
}

catid_rsa.pub ファイルからシェルパイプを削除することもできますが、この程度なら続行できると思います。

編集:
これは、
基本的にリモートホストで新しいシェルを起動して渡したコマンドssh(引用符)を実行することです。このcat >> .ssh/authorized_keysセクションに達すると、まだSTDINから読み込まれていないため、STDINのデータはcat ~/.ssh/id_rsa.pubまだ残ります。catSTDINからデータを読み取り、それを新しいAuthorized_keysファイルにリダイレクトします。次に、残りのコマンドを実行します。

おすすめ記事