我需要在服务器后端自动将用于复制远程服务器文件的脚本写到此处。如下所示:
#!/usr/bin/expect -f
spawn /usr/local/bin/scpdata.sh
set timeout 3000
expect "root@172.100.100.143's password:"
set timeout 3000
send "xxxx"
set timeout 3000
send "exit\r"
expect eof
scpdata.sh文件
#!/bin/bash
scp test@172.100.100.143:/tmp/11-03-15_03:00:01.tar.gz /tmp
但这不起作用,问题出在哪里以及如何做到这一点?请帮忙
答案 0 :(得分:2)
我建议您使用公钥身份验证(在客户端上使用ssh-keygen
生成公钥/私钥对,并将公共(默认情况下为.ssh/id.pub
)密钥添加到.ssh/authorized_keys
上服务器 - 参见手册页)。比你可以:
ssh-agent
或在后一种情况下,我建议您将键限制为特定命令。我不知道如何为scp设置命令,但是
ssh test@172.100.100.143 'cat /tmp/11-03-15_03:00:01.tar.gz' > /tmp/11-03-15_03:00:01.tar.gz
是等价的。您只需在command="
中的密钥前写下"
命令 .ssh/authorized_keys
即可。当使用此密钥授权时,ssh服务器将始终运行指定的命令,无论ssh命令行上给出了什么。这可以限制攻击者在访问无密码密钥时可能造成的损害。
如果你需要改变文件的名称,你需要在服务器端编写一个脚本,它将提取$SSH_ORIGINAL_COMMAND
的名称(这是服务器端脚本得到的东西)在ssh命令行上给出),检查它是否是允许的文件之一并捕捉它。
答案 1 :(得分:0)
send "xxxx\r"
set timeout 3000
实际上没有暂停 - 它将超时值设置为3000秒(50分钟)。如果您需要暂停,sleep 3
。
exp_internal 1
调试您的模式。