通过ssh登录后如何在远程服务器上执行脚本

通过ssh登录后如何在远程服务器上执行脚本

我管理着一堆服务器,所以我经常需要通过 ssh 访问它们。我想在登录后在任何远程服务器上自动运行一个基本的自定义脚本。比如设置一些别名、vim 的颜色、PS1 等等。

我不想用启动脚本配置每台服务器,我希望它本地存在于我的计算机上,并且只在我 ssh 进入的任何服务器上执行。

还有类似的问题但执行脚本后 ssh 会注销。如何保持登录状态?

这个答案很接近,但新的bash -l似乎没有注册环境变量集,如:ssh -t user@remote 'export PS1=myps1; bash -l'。这里,新提示符中没有设置PS1,可能是因为一些远程.bashrc

这怎么可能?

答案1

这很简单:

ssh [email protected] 'bash -s' < local_bash_script.sh

执行脚本后,local_bash_script.shssh-session 将立即关闭。

更新。

如果您想在 ssh 登录后在远程服务器上执行某些操作,只需创建 sshrc文件即可。创造在远程服务器上 rc用户.ssh目录中的文件:

touch ~/.ssh/rc

使用您最喜欢的文本编辑器打开文件,例如nano

nano ~/.ssh/rc

并复制/粘贴脚本文件的内容:

#/bin/sh

date
whoami
uname -r

exit 0

每次登录期间都会执行脚本(将date, whoami,替换uname -r为您的命令)。

该脚本~/.ssh/rc将为文件所在目录rc的所有者的明确用户执行。如果您希望rc为远程服务器上的所有用户执行脚本,请创建另一个全局sshrc文件:

/etc/ssh/sshrc

就这样。

答案2

在您的~/.bashrc.

SSH_CLIENT以防万一,您可以检查/的值SSH_TTY来检测您是否通过 ssh 连接。

if [ -n "$SSH_CLIENT" ] || [ -n "$SSH_TTY" ]; then ... ; fi

查看如何检测 shell 是否由 SSH 控制?更多细节

答案3

你可以看看我的回答这里

由于我使用 iTerm2,我想出了:

你也可以有一个像这样的脚本~/test.py

#!/usr/local/bin/python3

print("echo hello world")

然后在 iTerm2 菜单 Session->Run Co-Process 中将该脚本作为协进程执行,并将该脚本指定为~/test.py

我认为有必要使您的脚本可执行(尽管我没有尝试过其他方式)chmod +x ~/test.py,.

快乐编码!

相关内容