plink
SSHを介して接続し、サーバー側でいくつかのコマンドを実行するWindows実行可能ファイル。
例えば
plink myname@mycomputer ls
mynameのホームディレクトリで実行されたlsコマンドの結果が表示されます。
残念ながら、どちらも実装されて~/.profile
いません~/.bashrc
。
接続契約とは何ですかssh
、何が定義されており、どの変数が設定され、どの変数が設定されていませんか?走れば
plink myname@mycomputer env
HOME
、、PWD
などのLOGNAME
ユーザー固有の変数があります。他の設定はどうですか?
次のいずれも役に立ちません。
plink myname@mycomputer sh -c env
plink myname@mycomputer bash -c env
これらのコマンドは機能しますが、「ネイキッド」変数セットを表示します。
ユーザーの初期スクリプトを実行するようにシェルに指示するにはどうすればよいですか?
答え1
ssh
実行中の内容を観察できます。sysdig
ある端末で実行してから別の場所で実行すると、plink myname@mycomputer uptime
次の内容が表示されます。
$ sudo sysdig -p '%proc.cmdline' 'evt.type = execve'
sshd
bash -c uptime
bash -c uptime
uptime
したがって、この場合はbash
パラメータを使用して実行しています(たとえば、デフォルトではインストールされていないAlpine Linuxではそうでない可能性がありますbash
)-c uptime
。引き続き実行する必要がある素晴らしいパイプや複数のシェルコマンドがないため、これはややコマンドbash
に直接接続されます。exec
bash
次に、開いているファイルを記録しbash
てコマンドを再実行できますplink ... uptime
(システムで進行中の他のタスクによっては、より冗長になる可能性があります)。
$ sysdig 'evt.type = open and proc.name = "bash"'
7847 16:03:48.388447919 0 bash (22135) > open
7848 16:03:48.388466237 0 bash (22135) < open fd=3(<f>/etc/ld.so.cache) name=/etc/ld.so.cache flags=4097(O_RDONLY|O_CLOEXEC) mode=0
7855 16:03:48.388669720 0 bash (22135) > open
7856 16:03:48.388695391 0 bash (22135) < open fd=3(<f>/lib64/libtinfo.so.5) name=/lib64/libtinfo.so.5 flags=4097(O_RDONLY|O_CLOEXEC) mode=0
7871 16:03:48.389069345 0 bash (22135) > open
7872 16:03:48.389082901 0 bash (22135) < open fd=3(<f>/lib64/libdl.so.2) name=/lib64/libdl.so.2 flags=4097(O_RDONLY|O_CLOEXEC) mode=0
7885 16:03:48.389284722 0 bash (22135) > open
7886 16:03:48.389290872 0 bash (22135) < open fd=3(<f>/lib64/libc.so.6) name=/lib64/libc.so.6 flags=4097(O_RDONLY|O_CLOEXEC) mode=0
7921 16:03:48.391876315 0 bash (22135) > open
7922 16:03:48.391927051 0 bash (22135) < open fd=-6(ENXIO) name=/dev/tty flags=67(O_NONBLOCK|O_RDWR) mode=0
7945 16:03:48.393905761 0 bash (22135) > open
7946 16:03:48.393957884 0 bash (22135) < open fd=3(<f>/proc/meminfo) name=/proc/
meminfo flags=4097(O_RDONLY|O_CLOEXEC) mode=0
8049 16:03:48.395910893 0 bash (22135) > open
8050 16:03:48.395916693 0 bash (22135) < open fd=3(<f>/root/.bashrc) name=/root/.bashrc flags=1(O_RDONLY) mode=0
したがって、テストVMはこの内容を読んでいるようです/root/.bashrc
。これを確認するために、ファイルにいくつかのコンテンツを追加し、サーバーでテストコマンドを再実行することができます。
echo echo echo >> ~/.bashrc
plink ...
その後、再接続します(必要に応じてコマンドを調整します)。
$ ssh gato uptime
echo
16:05:20 up 5:19, 1 user, load average: 0.11, 0.38, 0.27
$
だからこの場合.bashrc
はい読んでいるので、そこにコマンドを入力できます。あなたの出来事がなぜ読まれないのかわかりません.bashrc
。何が起こっているのかを追跡してみてください。