如何将SSH用户重定向到另一个SSH登录?
我有一个人需要访问我的SSH服务器,但我希望他们对程序的访问权限有限。 他们应该使用的是ssh,以登录到另一台服务器。 我的服务器是另一台服务器的访问点。 我不希望这个用户运行除了他们需要在其他网络上获得的ssh程序之外的程序。
理想情况下,当他们登录时,他们将被重定向到另一个SSH登录,并没有任何其他立即选项来做任何其他事情。
没有SSH用户具有root权限。
我怎么能设置它? 我想我可以用他们的bashrc文件来做。 我将编写一个在登录时执行的辅助登录脚本。 有没有办法让用户登录SSH服务器,并在登录时忽略他们的bashrc文件? 有没有更好的方法我应该考虑?
考虑在sshd_config
使用ForceCommand
指令。 例如,我使用这些来强制用户组到一组服务器:
Match Group group1 ForceCommand ssh -t group1.fqdn Match Group="*,!local,!group2,!root" ForceCommand ssh -t group3.fqdn
你可以使用:
Match User foo ForceCommand ssh -t target-host
你想编辑bashrc文件。 我会看看他们可以这样限制他们访问除ssh之外的所有bash命令。 这个链接有很好的信息。
另一个想法是通过隧道设置ssh传递而无需访问登录。 此链接也可能有用。 这可能更容易配置。
只需将用户的登录shell设置为shell脚本,而不是将包含ssh语法的bash或sh设置为第二个端点。 所有登录,除非他们在ssh语法中使用-s明确定义shell,否则将按您的请求重定向。
我可以通过各种方法摆脱BASHRC的限制。 如果您希望它们是恶意的,请确保它们无法在登录时指定备用shell。
陷阱用户sigint因此他们无法按Ctrl + C并检查退出ssh以退出代码0,否则完全退出或无限期重试。 你的选择。
您可以通过强制用户在本地使用ProxyCommand
,将您自己的服务器视为SSH 堡垒主机来实现这一点。
在您的服务器(堡垒)上,在sshd_config
中将用户限制为nc
,如下所示:
Match User restricted_usr ForceCommand nc -w 600 restricted_usr_vm 22
在~/.ssh/config
的客户端(假设OpenSSH
):
Host myserver ProxyCommand ssh bastion nc -w 600 restricted_usr_vm 22
(Windows用户可以使用 PuTTY的plink
通过PuTTY使用ssh代理 )。
但是,由于你的ForceCommand
,我很确定ssh命令被忽略了; ProxyCommand ssh bastion I am a bannana
应该具有相同的效果。 来自用户的直接连接(缺少ProxyCommand
)将导致对restricted_usr_vm的原始SSH转储。
正如对此处另一个答案的评论中所述, ForceCommand
将很难管理对堡垒主机的SSH密钥访问。 我可以想到两个简单的解决方案: (1)在授予目标主机访问权限的堡垒上为该用户安装无密码SSH密钥,并让该用户的crontab在堡垒上运行scp restricted_usr_vm:.ssh/authorized_keys ~/.ssh/
或(2)创建一个Web表单(如GitHub)以允许上传该文件。 (3) NFS也可以工作,但我不太喜欢它,因为.ssh
目录可能会被安装它的任何系统上的root(或相同的UID)的某个人所破坏。
我在非常相似的ServerFault问题基于用户名的SSH代理上发布了一个非常相似的答案 (有关ProxyCommand的更多细节)。
我比ForceCommand ssh -t restricted_usr_vm
更喜欢这个,因为它更好地处理超时而且ssh -t
有点笨重(而且,现在可能在过去,有时候不可靠)。 我也猜测像scp
这样的东西不能通过这种方法工作,而它们可以通过ProxyCommand
完美地工作。