plink
是 Windows 可执行文件,它通过 ssh 连接并在服务器端执行一些命令。
例如
plink myname@mycomputer ls
将显示 ls 命令的结果,在 myname 的主目录中执行。
不幸的是,既没有~/.profile
也没有~/.bashrc
被执行。
什么是ssh
连接契约,什么定义,哪些变量已设置,哪些未设置?如果我跑
plink myname@mycomputer env
我看到了一些变量,例如HOME
,PWD
并且LOGNAME
是特定于用户的。其他的怎么设置?
以下都没有帮助:
plink myname@mycomputer sh -c env
plink myname@mycomputer bash -c env
这些命令有效,但显示了“裸”变量集。
如何告诉 shell 为用户执行它的初始脚本?
ssh
例如在一个终端中可以观察到什么运行sysdig
,然后在其他地方运行plink myname@mycomputer uptime
应该显示类似所以在这种情况下正在使用参数运行(例如在默认情况下
bash
不安装的 Alpine Linux 上可能不是这种情况) 。这或多或少会直接导致该命令,因为没有花哨的管道或需要继续运行的多个 shell 命令。bash
-c uptime
bash
exec
bash
接下来,我们可以记录
bash
打开了哪些文件,然后再次运行plink ... uptime
命令(这可能会更详细,具体取决于系统上发生的其他情况):因此
/root/.bashrc
,我的测试虚拟机似乎正在阅读这里;为了确认这一点,我们可以在该文件中添加一些内容,然后在服务器上再次运行我们的测试命令:然后我们再次连接(
plink ...
根据需要调整命令)所以在这种情况下
.bashrc
正在读取,所以你可以把命令放在那里。我不确定您的情况为什么.bashrc
没有被阅读;跟踪事情以查看发生了什么。