
リモート サーバーで一連のジョブを開始するシェル スクリプトがあります。このサーバーに ssh で接続して (ただしパスワードが必要です)、スクリプトを手動で実行できますが、ローカルでも実行される特定の手順があるため、手動で ssh して実行することは避けたいです。自動的に ssh/ログインして、より大きなローカル シェル スクリプト内でコマンドを開始する方法はありますか?
答え1
リモート サーバーで実行するコマンドが多数ある場合は、それらをシェル スクリプトとして作成し、それを一度アップロードして、ssh コマンドごとに 1 回実行することをお勧めします。
スクリプトの実行権限があること、および、対話型ログイン スクリプトによって設定された変数やパスなど、通常のシェル セッションから取得された情報に依存していないことを確認してください。たとえば、.bashrc は、リモート ssh コマンド経由でコマンドを実行するときには実行されません。
また、コマンドが期待どおりに完了することを確認するために、スクリプトの「return」がチェックされていることを確認してください。
答え2
リモートホスト上でスクリプト/コマンドを実行するには、
ssh [<USER>@]<REMOTE_HOST> [-f] <REMOTE_COMMAND>
-f
コマンドが完了するのを待たずに、ssh をすぐにバックグラウンドに移行させたい場合は、オプションを追加します。
ログインに関して言えば、自動パスワード識別は一般的には悪い考えです。設定上、秘密鍵と公開鍵のペア (秘密鍵はローカル マシンに保存され、公開鍵はリモート マシンに保存される) を生成して認証に使用することが本当に不可能である場合は、上記のコメントで提案されているように、次のようなツールに戻ってsshpass
リモート セッション/コマンドを開始する必要があります。
sshpass -p <YOURPASSWORD> ssh [<USER>@]<REMOTE_HOST> [-f] [<REMOTE_COMMAND]
答え3
公開鍵/秘密鍵認証を使用すると、パスワードを必要とせずに認証を確立できますssh
。そのためには、キーペア ( ssh-keygen
) を生成し、公開鍵をサーバーのユーザー ~/.ssh/authorithed_keys ファイルに追加するだけです。
#!/bin/bash
ssh user@server RemoteCommand #man ssh for more info
local command1
local command2
.....