SSHによるシェルスクリプトリモートコマンドの作成

SSHによるシェルスクリプトリモートコマンドの作成

頻繁に必要なコマンドを実行するためにシェルスクリプトを作成しようとしています。 SSHログインに公開/秘密鍵のペアを使用してパスワードプロンプトをスキップします。検索を行った後、次のようなコードを実行できました。

ファイル:ssh.sh

ssh -X [email protected] << EOF
cd /root/myDir
gedit a.c b.c
EOF

しかし、次のように書くと何の違いもありません。

ssh -X [email protected] << EOF
cd /root/myDir
gedit a.c b.c &
EOF

他に何もない&。はい&、通常はgeditが実行された後にバックグラウンドで送信され、プロンプトが表示されます。しかし、geditの後にプロンプ​​トは表示されません。 (ただし、次の行の内容はすべて実行されます。入力するとすぐにecho "Hello"表示されますHello。)

どうなりますか?別の方法がありますか? SSHを実行し、シェルスクリプトを介していくつかのコマンドを実行したいと思います。ただし、シェルスクリプトの実行が完了した後はログアウトしたくありません。上記のスクリプトのように繰り返されないいくつかのコマンドを実行した後、手動でログアウトしたいと思います。

ベストアンサー1

そうでない場合、リモートで実行されたスクリプトは「に変更してから実行し、終了するのを待ちます」と&言います。出口を待たないという意味のバリエーションです。どちらの方法でもスクリプトの最後のコマンドを実行した後、シェルは終了します。/root/myDirgedit&gedit

スクリプトを実行してからよりインタラクティブに入力されたコマンドを実行するには、最後にインタラクティブシェルを実行する必要があります。

ssh -Xt [email protected] 'cd /root/myDir && gedit a.c b.c; exec bash'

このオプションは、-tSSH にサーバーに仮想端末を設定するよう指示します。実行するリモートコマンドを渡すと、デフォルトではこれは行われません。exec bash最後に、シェルに新しいbashインスタンスに置き換えるように指示します。このインスタンスは入力が端末から来るため、対話型シェル(プロンプトの表示、コマンドの受信など)になります。

おすすめ記事