如何将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完美地工作。