ssh config 自动执行远程命令

vla*_*lad 7 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 初始化脚本执行我的命令?

Ken*_*ter 7

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

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

ssh-rsa AAAAB3NzaC1yc2...
Run Code Online (Sandbox Code Playgroud)

您可以在一行的前面添加一个命令指令:

command="sudo -iu project_user bash" ssh-rsa AAAAB3NzaC1yc2...
Run Code Online (Sandbox Code Playgroud)

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

我建议您设置两个用于通过 ssh 连接到此服务器的密钥:一个执行此 sudo 操作的密钥,另一个不执行此操作。你可能会需要能够获得进入服务器而无需执行sudo的操作不时。运行 sudo 的密钥也不适用于运行 scp 或 sftp,至少在服务器上没有设置更复杂的东西时不会。


Gil*_*il' 4

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

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

ssh -t yourserver exec sudo -iu project_user
Run Code Online (Sandbox Code Playgroud)