som*_*ing 9 password scp file-transfer
在我的 Fedora 20 系统上,我经常使用 scp,这是我第二次遇到这种情况,当我运行以下命令时:
scp -r -P PORT user@host:/home/user/something/{file1,folder1,folder2,folder3,folder4} folder/folder2/
Run Code Online (Sandbox Code Playgroud)
它要求我输入它传输的每个文件/目录的密码。
user@host's password: "password here"
Run Code Online (Sandbox Code Playgroud)
题:
这里发生了什么?
这是正常的,我会认为这是非常奇怪的行为吗?
gei*_*rha 13
您的本地 shell(可能是 bash)正在扩展
user@host:/home/user/something/{file1,folder1,folder2,folder3,folder4}
Run Code Online (Sandbox Code Playgroud)
进入:
user@host:/home/user/something/file1 user@host:/home/user/something/folder1 user@host:/home/user/something/folder2 user@host:/home/user/something/folder3 user@host:/home/user/something/folder4
Run Code Online (Sandbox Code Playgroud)
相反,你可以这样做:
scp -r -P PORT user@host:"/home/user/something/file1 /home/user/something/folder1 /home/user/something/folder2 /home/user/something/folder3 /home/user/something/folder4" folder/folder2/
Run Code Online (Sandbox Code Playgroud)
或者,如果您知道远程端的用户登录 shell 是 bash,您也可以使用大括号扩展:
scp -r -P PORT user@host:"/home/user/something/{file1,folder1,folder2,folder3,folder4}" folder/folder2/
Run Code Online (Sandbox Code Playgroud)
让远程 shell 将字符串拆分为参数而不是本地 shell。
是的,这很正常。发生的情况是您的 shell 在运行命令之前扩展了大括号,因此您实际运行的是
scp -r -P PORT user@host:/home/user/something/file1 \
user@host:/home/user/something/folder1 \
user@host:/home/user/something/folder3 \
user@host:/home/user/something/folder4 folder/folder2
Run Code Online (Sandbox Code Playgroud)
基本上,scp
看到多个连接请求,因此为每个连接请求打开一个新连接。单程最简单的方法(使用@geirha 建议的引号对于一次性操作来说更简单)解决这个问题是设置无密码ssh
/ scp
:
$ ssh-keygen
$ ssh-copy-id -p PORT user@host
Run Code Online (Sandbox Code Playgroud)
运行这两个命令一次(并根据需要回答提示)后,您将能够ssh
/scp
无需为所有未来的 ssh 连接使用密码。这是我)其实更安全和ii)多方便多了。
归档时间: |
|
查看次数: |
10240 次 |
最近记录: |