使用交互式SSH在远程主机上运行命令(有条件)


9

我希望能够在每次登录远程主机时在当前交互式SSH会话中自动在该主机上运行命令。

就像是

ssh user@remotehost [run do.sh]

在哪里do.sh执行几个内务处理任务,然后重新附加到screen会话(当前,我do.sh在登录主机后手动运行)。

我不想添加它,.bashrc因为我是从其他计算机登录到该主机的,并且我不想do.sh在从该计算机登录时运行,所以我需要它是可选的。


1
为什么你不简单地跑步ssh user@remotehost /path/to/do.sh?如果一切正常,你甚至可以别名它的.ssh / config或您的personnal的.bashrc
科伦

因此,当您从某个位置登录到remotehost时要运行“ do.sh”,而不是从其他地方登录到remotehost时要运行吗?您哪些主机连接应触发“ do.sh”,而其他主机则不应该触发?
2012年

是的,我想有时但不是所有时间都运行它,原因是我的Mac上有一个启动器提供的键盘快捷键,可以使我大部分时间得到所需的信息。我点击了一个快捷方式,我想先进入框,然后重新连接到屏幕会话,但是如果我使用“ ssh user @ host”之类的常规终端,则不想这样做。Patkos下面提到的解决方案正是我需要的。
Jim Farkas,2012年

Answers:


15

您可以尝试这样的事情:

ssh server -t "do.sh; bash --login"

如此处建议的那样:https : //serverfault.com/questions/167416/change-directory-automatically-on-ssh-login

或者,您可以尝试使用sshd_conf(或〜/ .ssh / config)中的“ LocalCommand”选项,如官方手册页中所述:http ://unixhelp.ed.ac.uk/CGI/man-cgi?ssh+1


1
非常感谢!!ssh服务器-t“ /home/user/do.sh; bash --login”对我有用。köszönömszépen!
Jim Farkas'2

1
Szivesen(不客气)
Patkos Csaba'2

@PatkosCsaba请在此处避免使用英语以外的其他语言。这也适用于评论。
LinuxSecurityFreak

3

难题的一部分:假设使用OpenSSH,ssh客户端将设置以下环境变量:

SSH_CONNECTION 标识连接的客户端和服务器端。该变量包含四个以空格分隔的值:客户端IP地址,客户端端口号,服务器IP地址和服务器端口号。

因此,您可以使用此信息来查找连接的来源

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.