tinc
我有一个外部 VPS,它通过IP 地址与另一台服务器建立 VPN 连接10.0.0.2
。
当通过特定用户连接时,我想通过一个命令通过 ssh 和 scp 连接到我的其他服务器 - foo
。
我可以ssh
通过将这个添加到我的 VPS 来完成此操作/etc/ssh/sshd_config
:
Match User foo
ForceCommand ssh -t [email protected] -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no
不幸的是,当我尝试scp
(scp ~/Desktop/hello.txt foo@vps_ip:/
)使用此配置时,我得到:
Pseudo-terminal will not be allocated because stdin is not a terminal.
Warning: Permanently added '10.0.0.2' (ECDSA) to the list of known hosts.
Welcome to Ubuntu 18.04.3 LTS (GNU/Linux 4.15.0-70-generic x86_64)
mesg: ttyname failed: Inappropriate ioctl for device
也一样
答案1
您的 ForceCommand 需要运行一个脚本来动态确定正确的 ssh 命令。
"$SSH_ORIGINAL_COMMAND"
如果变量本地非空,则添加为远程命令。这允许ssh firsthost "uname -a"
(例如)之类的内容正确传递到第二台主机。添加
-t
除非stdin/stdout 是终端。批量传输 (scp、sftp、rsync、git) 需要 8 位干净流,强制 tty 分配会损坏数据。首先考虑不要以这种方式堆叠 SSH – 最好使用端口转发(iptables DNAT)或客户端 JumpCommand。