我在VPN下通过ssh连接到服务器。为了进行项目更改,我总是在访问服务器后执行相同的过程 - 以project_user 身份登录,因为以我的身份我获得了sh
shell,并且没有对项目文件的写访问权限。
在我的 ~/.ssh/config 文件中,我尝试使用LocalCommand
参数来自动化该过程:
LocalCommand sudo -iu project_user bash
进而
LocalCommand /bin/sh -c sudo -iu project_user bash
但这些都没有带来任何改变 - 连接后我仍然在sh
shell 中,我需要一次又一次地运行上面的命令。
有任何想法吗?
更新:抱歉,这个 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