我在使用 SSH 共享连接时遇到以下问题:
# Set up a shared connection
ssh -f -N -M -S "$SSH_CONTROL_SOCKET" root@"$ONE_HOST"
# I can scp *without* the shared connection
scp root@"$ONE_HOST":/etc/hosts /dev/null
# I can execute a remote command *with* the shared connection
ssh -S "$SSH_CONTROL_SOCKET" root@"$ONE_HOST" "date"
# But I can't scp *with* the shared connection
scp -vvv -S "$SSH_CONTROL_SOCKET" root@"$ONE_HOST":/etc/hosts .
该脚本给出以下输出:
hosts 100% 59 67.8KB/s 00:00
Wed Feb 28 08:23:10 MST 2018
Executing: program /home/myUser/ssh_sharing_socket host myHost.example.com, user root, command scp -v -f /etc/hosts
/home/myUser/ssh_sharing_socket: Permission denied
我的 SSH 共享连接使用公钥和 SSH 代理进行身份验证。
我必须做什么才能通过共享连接进行 scp?
答案1
ssh
并将scp
该-S
选项用于不同的目的。
ssh
:
-Sctl_path
指定用于共享连接的控制套接字的位置,或使用字符串“none”来禁用连接共享。有关详细信息,请参阅 ssh_config(5) 中 ControlPath 和 ControlMaster 的描述。
scp
:
-Sprogram
用于加密连接的程序名。该程序必须理解 ssh(1) 选项。
您收到错误“权限被拒绝”,因为scp
正在尝试将控制套接字作为程序运行。
对于 scp,您应该使用选项-o ControlPath=/path/to/socket
:
scp -vvv -o "ControlPath=$SSH_CONTROL_SOCKET" root@"$ONE_HOST":/etc/hosts .