ログインと同時に who を実行したい。
サーバ側の .bashrc とかに書いておけば良いが、サーバ全ての .bashrc に who を仕込むのは面倒。
-t
オプションを使えば上手くいくという記事があった。
参考:SSHログイン時のコマンド実行 - sodomojoにっき
ssh hostname who
だと、接続先で who が実行されたのかもわからない。
[~]% ssh 192.168.1.20 who
[~]%
ssh -t hostname who
ならば、実行結果がわかるようになる。
[~]% ssh -t 192.168.1.20 who
kanemu pts/0 2018-01-04 11:14 (192.168.1.2)
Connection to 192.168.1.20 closed.
[~]%
-t
オプション は、「仮想端末を割り当てる」オプションらしい。
-t
強制的に仮想端末を割り当てます。これはリモートマシン上で任意の画面ベースのプログラムを実行するとき(たとえば、メニューサービスを実装するときなど)に非常に便利です。複数の-t をつけると、たとえssh がローカル側での端末を持っていない場合でも強制的に仮想端末を割り当てます。
ssh hostname [command]
は、sshの接続先でcommandを実行するためのもの。実行し終わったら閉じてしまう。
ただし、コマンドが動いているうちは閉じないので、 tail -f
とかなら control + c で読み込みをやめるまで閉じない。
ならば、 /bin/bash
をそのまま実行して、対話式シェルが動いている状態にすればログイン先に留まってくれる、ということらしい。
bash -l
オプションをつけて、環境変数をそのまま引き継ぐようにして実行する。
% ssh 192.168.1.20 -t "echo '> who' && who && /bin/bash -l"
> who
kanemu pts/0 2018-01-04 11:29 (192.168.1.2)
[kanemu@example ~]$
リサーチ中に知ったことメモ
sshrc
sshrc をインストールすれば、~/.sshrc に書いたコマンドを各サーバで実行してくれるらしい。
参考:sshした先に.bashrcや.vimrcを持って行きたい人のためのsshrc - Qiita
使ってみたが、多段SSHで他サーバを踏み台にすると上手くいかなかった。
多段sshの方法について
他サーバを踏み台にしてログインするには、 -t
オプションを使う方法の他に、ProxyCommand を使う方法があるらしい。
ググりワードは「多段ssh」か「踏み台サーバ」とかで出る。
# 192.168.1.10 を踏み台に 192.168.1.20 にログイン
ssh -t 192.168.1.10 ssh 192.168.1.20
# ProxyCommandを使う方法
ssh -o ProxyCommand='ssh -W %h:%p 192.168.1.10' 192.168.1.20