如何启用sshpass输出到控制台

24

使用scp并交互式输入密码时,文件复制进度会发送到控制台,但是在脚本中使用sshpass复制文件时没有控制台输出。

$ sshpass -p [password] scp [file] root@[ip]:/[dir]

看起来sshpass正在抑制或隐藏scp的控制台输出。是否有一种方法可以启用sshpass scp输出到控制台?


我认为最好的选择不是使用sshpass。如果可以的话,请使用公钥身份验证。如果您需要更多控制正在发生的事情,那么您将不得不编写expect脚本。 - Jakuje
2
这是一个嵌入式目标。sshpass 是目前可用的工具。 - jacknad
请尝试使用此链接以便查找[http://unix.stackexchange.com/questions/188291/how-to-view-progress-with-sshpass-and-scp-in-linux]。 - Ajith P
3个回答

8

After

sudo apt-get install expect

文件send-files.exp按预期工作:

#!/usr/bin/expect -f

spawn scp -r $FILES $DEST
match_max 100000
expect "*?assword:*"
send -- "12345\r"
expect eof

3

虽然不是完全符合期望,但比保持沉默要好:

SSHPASS="12345" sshpass -e  scp -v -r $FILES $DEST 2>&1 | grep -v debug1

请注意,-e-p更加安全。
输出:
Executing: program /usr/bin/ssh host servername, user username, command scp -v -t /src/path/dst_file.txt
OpenSSH_6.6.1, OpenSSL 1.0.1i-fips 6 Aug 2014
Authenticated to servername ([10.11.12.13]:22).
Sending file modes: C0600 590493 src_file.txt
Sink: C0600 590493 src_file.txt
Transferred: sent 594696, received 2600 bytes, in 0.1 seconds
Bytes per second: sent 8920671.8, received 39001.0

为什么“-e”比“-p”更安全一些? - FarK
6
@FarK 的命令 SSHPASS="12345" sshpass -e ps aux | grep sshpass 显示出 sshpass -e ps aux,而 sshpass -p 12345 ps aux | grep sshpass 则显示出 sshpass -p zzzzz ps aux。在某个短时间内,ps 可能会显示 -p 12345。此外,有一条命令 history | grep shpass,但是以空格开头的命令不会被保存在历史记录中... - 18446744073709551615

0
以这种方式: output=$(sshpass -p $PASSWD scp -v $filename root@192.168.8.1:/root 2>&1) echo "Output = $output" 你将控制台输出重定向到变量output中。
或者,如果您只想看到scp命令的控制台输出,您应该在ssh pass cmd中添加-v命令: sshpass -p $PASSWD scp -v $filename root@192.168.8.1:/root

5
scp -v 只会打印调试信息,而不会输出与没有使用 sshpass 的 scp 相同的进度输出。将 sshpass 输出重定向到变量中也无法提供 scp 的进度输出。这个答案不是一个解释。 - studog
我认为这显然不是提问者寻找的答案。 - vipcxj

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接