如何设置plink.exe的环境变量?

如何设置plink.exe的环境变量?

plink是 Windows 可执行文件,它通过 ssh 连接并在服务器端执行一些命令。

例如

plink myname@mycomputer ls

将显示 ls 命令的结果,该命令在 myname 的主目录中执行。

不幸的是,两者都~/.profile没有~/.bashrc被执行。

什么是连接契约ssh,定义了什么,设置了哪些变量,未设置哪些变量?如果我跑

plink myname@mycomputer env

我看到一些变量,例如HOMEPWDLOGNAME,这些变量是特定于用户的。其他的怎么设置?

以下均无帮助:

plink myname@mycomputer sh -c env

plink myname@mycomputer bash -c env

这些命令有效,但显示了“裸”变量集。

如何告诉 shell 为用户执行它的初始脚本?

答案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继续运行的花哨管道或多个 shell 命令。

接下来,我们可以记录打开的文件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

所以看来/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没有被阅读;追踪事物以了解发生了什么。

相关内容