ssh配置自动执行远程命令

ssh配置自动执行远程命令

我在VPN下通过ssh连接到服务器。为了进行项目更改,我总是在访问服务器后执行相同的过程 - 以project_user 身份登录,因为以我的身份我获得了shshell,并且没有对项目文件的写访问权限。

在我的 ~/.ssh/config 文件中,我尝试使用LocalCommand参数来自动化该过程:

LocalCommand sudo -iu project_user bash

进而

LocalCommand /bin/sh -c sudo -iu project_user bash

但这些都没有带来任何改变 - 连接后我仍然在shshell 中,我需要一次又一次地运行上面的命令。

有任何想法吗?


更新:抱歉,这个 LocalCommand 参数适用于本地命令,而不是远程命令。是否有任何 ssh_config 参数可以让我在连接到服务器后执行远程命令?
或者至少将 shell 更改为 bash,以便我可以通过 bash 初始化脚本执行命令?

答案1

OpenSSH 服务器允许您将命令与 ssh 密钥相关联。当使用特定的 ssh 密钥连接到服务器时,服务器将忽略客户端请求的命令并运行与该密钥关联的命令。如果您在这些会话中使用 ssh 密钥,则可以使用此功能来启动 sudo 命令。

您可以通过服务器上帐户的“authorized_keys”文件进行设置。这sshd(8) 手册页描述authorized_keys文件格式。简而言之,authorized_keys 是一系列行,每行都以如下内容开头:

ssh-rsa AAAAB3NzaC1yc2...

您可以将命令指令添加到行的前面:

command="sudo -iu project_user bash" ssh-rsa AAAAB3NzaC1yc2...

当使用相应的密钥进行身份验证时,SSH服务器将忽略SSH客户端请求的命令,而是运行指定的命令。当 sudo 进程(以及在其中运行的 shell)退出时,ssh 会话将关闭。

我建议您设置两个用于 ssh 进入该服务器的密钥:一个执行此 sudo 操作,另一个不执行此操作。您可能需要能够进入服务器没有不时执行 sudo 操作。运行 sudo 的密钥也不适用于运行 scp 或 sftp,至少在服务器上没有设置更复杂的东西的情况下是这样。

答案2

顾名思义,LocalCommand在本地(客户端)计算机上运行命令,而不是在远程(服务器)计算机上运行命令。在服务器上运行的命令是您ssh在选项和主机名之后传递给的参数。

默认情况下,传递命令时不会创建终端,因此请传递选项-t来创建终端。而不是ssh yourserver,运行

ssh -t yourserver exec sudo -iu project_user

答案3

如果您可以登录到远程系统,您可以在那里更改默认 shell:

chsh -s /bin/bash

相关内容