我有一些现有的脚本,其中使用ftp + .netrc.
我想现在切换到sftp,但它似乎不支持宏/ .netrc.
还有其他选择吗?
请帮忙.
简单地说,您不能使用.netrc
与sftp
,scp
或ssh
.这些产品是OpenSSH标准的一部分,其名称中包含关键字"secure".以这种方式自动化登录并不是一种安全的做法.netrc
,标准禁止这种自动化(存储密码).肯定有另外一种,实际上有三种.
对于前两个备选方案中的任何一个,您将需要设置密钥并进行交换.在您正在运行的计算机上ssh-keygen
,为了您的目的,如果您不给密钥一个密码短语会更简单,尽管这是有风险的.你现在有两个文件.ssh/
,一个id_rsa
和一个id_rsa.pub
.其中id_rsa
必须保密或保密(因此通行短语).pub文件实际上是一行文本.这一行可以添加到~/.ssh/authorized_keys
接收主机端的文件中.您可以手动将密钥添加到文件中; 但也有ssh-copy-id
快捷命令就是这样做,也照顾文件权限.授权密钥后,当您以适当的用户身份连接时,您应该能够使用私钥从具有授权公钥的计算机连接到具有授权公钥的计算机.测试它ssh -v
.如果您输入密码短语,系统会提示您输入密码短语; 如果你没有,你现在已经自动化了.您可以使用an ssh-agent
在会话之间保持私钥活动,而只输入一次密码短语.如果您正在进行多ssh
跳,则转发代理的选项将允许来自原始源盒的私钥ssh-agent
通过每一跳进行通信.就个人而言,我发现这种情况过于紧张,因此建议不要使用密码短语.
现在,你可以做ssh
,sftp
以及scp
无需输入任何密码,连接或口令短语你准备休息自动化.
是您将.netrc
宏转换为shell脚本或调用一些scp
命令的其他脚本的首选替代方法.这类似于使用curl
或自动化所有ftp连接wget
.例如:
scp -qr $USER@$REMOTE_HOST:$PATH_FILE_OR_DIR $LOCAL_PATH_FILE_OR_DIR #download scp -qr $LOCAL_PATH_FILE_OR_DIR $USER@$REMOTE_HOST:$PATH_FILE_OR_DIR #upload scp -pqr $USER@$REMOTE_HOST:$PATH_FILE_OR_DIR $USER@$REMOTE_HOST2:$PATH_FILE_OR_DIR #mirror between separate hosts. ssh $USER@$REMOTE_HOST chmod 644 $PATH_FILE #set permissions
使用sftp
如你所说,你可以用它的脚本expects
命令,以批处理文件使用的-b
选项,或通过管道命令到sftp
.这与.netrc
宏观有点类似,但没有替代方案1的优势.我将展示后者的一个例子:
#!/bin/sh echo "OK, starting now..." sftp -b /dev/fd/0 remotehost <备选方案3,
sftp
通过允许您存储连接参数(如密码)来使用破坏SSH标准的程序.例如,使用cyberduck和AppleScript,或FileZilla和队列.附加说明:
您可以使用一个
~/.ssh/config
文件为主机名提供更短的名称,设置转发参数,默认目录,默认用户名以及每个主机的特定标识.我也喜欢这种选择,将我的转移率限制在更合理的范围内.-l
scp
PS你认为有一个工具可以将
.netrc
宏转换为(替代1样式)shell脚本.但我一无所获.这是一个小小的利基商机吗?
如果有人窃取他的.ssh私钥没有密码短语,就像他们偷走了他的.netrc文件一样糟糕,他们仍然可以将他们想要的任何内容上传到服务器.关键是只能从你知道永远不会被盗/被盗/等的机器上进行自动上传.