0

我有两行需要在 for 循环中重复执行

ssh tam@192.168.174.43 mkdir -p $location
scp -r $i tam@192.168.174.43:$location

但是每次都需要输入密码,我怎样才能改变密码然后只需要输入一次或更多的快速方式

4

2 回答 2

1

您可以使用 ssh-keygen ( https://help.ubuntu.com/community/SSH/OpenSSH/Keys )使用公钥/私钥生成方法,然后使用以下脚本。

for VARIABLE in dir1 dir2 dir3
do
ssh tam@192.168.174.43 mkdir -p $location
scp -r $i tam@192.168.174.43:$location
done 

替代解决方案:您可以使用sshpass

for VARIABLE in dir1 dir2 dir3
do
ssh tam@192.168.174.43 mkdir -p $location sshpass -p '<password>' <command>
scp -r $i tam@192.168.174.43:$location sshpass -p '<password>' <command>
done
于 2013-02-05T10:01:28.623 回答
0

虽然公钥/私钥是最简单的选择,但无需更改现有脚本,还有另一种选择,即使用sshfs. 默认情况下可能未安装 sshfs。

使用这种方法,您基本上mount可以通过 ssh 协议将远程文件系统转移到本地目录。然后您可以简单地使用 mkdir / cp 等命令。

注意:这些命令来自您的系统而不是远程系统。

通过 ssh 挂载是一项一次性工作,需要您手动干预。在运行脚本之前执行此操作。
例如,对于您的情况:

mkdir /tmp/tam_192.168.174.43
sshfs tam@192.168.174.43:/ /tmp/tam_192.168.174.43
tam@192.168.174.43's password: <ENTER PASSWORD HERE>

& 然后,在您的脚本中,使用简单的命令,例如:

mkdir -p /tmp/tam_192.168.174.43/$location
cp -r $i /tmp/tam_192.168.174.43/$location

& 卸载:

fusermount -u /tmp/tam_192.168.174.43
于 2013-02-05T13:22:19.787 回答