web-dev-qa-db-ja.com

sshを実行してすぐにコマンドを実行する

私はsshサーバーに接続した後にコマンドを実行するためのUNIXまたはbashコマンドを見つけようとしています。例えば:

ssh name@ip "tmux list-sessions"

上記のコードはうまくいきます、それはセッションをリストします、しかしそれはその後すぐに切断します。サーバー側のsshrcに入れてもうまくいきますが、クライアント側で入力できるようにする必要があります。コマンドを実行できるようにしたいのですが、ログインしてウィンドウを開いてから、設定したコマンドを実行します。私はもう試した

[command] | ssh name@ip

ssh name@ip [command]

ssh name@ip "[command]"

ssh -t name@ip [command]
127
cadlac
ssh -t 'command; bash -l'

コマンドを実行し、それが完了したらログインシェルを起動します。例えば:

ssh -t [email protected] 'cd /some/path; bash -l'
201
Barmar

LocalCommandオプションが有効になっている場合は、PermitLocalCommandコマンドラインオプションを使用できます。

ssh username@hostname -o LocalCommand="tmux list-sessions"

利用可能なオプションについての詳細は、ssh_configのmanページを参照してください。

13

これはかなりあなたが探しているものではありませんが、私はそれが似たような状況で役に立つことがわかりました。

私は最近私の$HOME/.bashrcに以下を追加しました(bash以外のシェルでも同様のことが可能です)。

if [ -f $HOME/.add-screen-to-history ] ; then
    history -s 'screen -dr'
fi

ある特定のマシンでscreenセッションを実行し続けていると、そのマシンへのssh接続が切断されてしまう問題があり、再接続するたびにscreen -drを再実行する必要があります。

それに加えて、そして私のホームディレクトリにその(空の)ファイルを作成した後、私は私のシェルが起動したとき私の歴史の中に自動的にscreen -drコマンドを持っています。再接続した後、私はただタイプすることができます Control-PEnter そして私は私のスクリーンセッションに戻ってきました - あるいは私はそれを無視することができます。柔軟ですが、完全に自動ではありません。tmux list-sessionsと入力するよりも簡単です。

history -sコマンドを無条件にすることをお勧めします。

これには、各ターゲットシステムで$HOME/.bashrcを更新する必要があります。これは、目的に合わない場合もあれば、不適切な場合もあります。

5
Keith Thompson