plink.exeの環境変数を設定するには?

plink.exeの環境変数を設定するには?

plinkSSHを介して接続し、サーバー側でいくつかのコマンドを実行する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に直接接続されます。execbash

次に、開いているファイルを記録し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。何が起こっているのかを追跡してみてください。

関連情報