将.netrc与sftp一起使用

将.netrc与sftp一起使用,ftp,macros,sftp,Ftp,Macros,Sftp,我有一些使用ftp+.netrc的现有脚本 我现在想切换到sftp,但它似乎不支持宏/.netrc 还有其他选择吗 请提供帮助。尝试查看scp,因为您可以使用无密码登录(ssh密钥)来完成此操作 我不确定您是否可以对SFTP使用相同的技术。简单地说,您不能将.netrc与SFTP、scp或ssh一起使用。这些产品是OpenSSH标准的一部分,其名称中有关键字“secure”。像.netrc那样自动登录不是一种安全的做法,标准禁止这种自动化(存储密码)。当然还有另外一种选择,实际上是三种 授权 对

我有一些使用ftp+.netrc的现有脚本

我现在想切换到sftp,但它似乎不支持宏/.netrc

还有其他选择吗


请提供帮助。

尝试查看scp,因为您可以使用无密码登录(ssh密钥)来完成此操作


我不确定您是否可以对SFTP使用相同的技术。

简单地说,您不能将
.netrc
SFTP
scp
ssh
一起使用。这些产品是OpenSSH标准的一部分,其名称中有关键字“secure”。像
.netrc
那样自动登录不是一种安全的做法,标准禁止这种自动化(存储密码)。当然还有另外一种选择,实际上是三种

授权 对于前两个备选方案中的任何一个,您都需要设置密钥并交换它们。在您从run
ssh-keygen
连接的机器上,出于您的目的,如果您不给密钥一个通行短语,则会简单得多,尽管这是有风险的。现在在
.ssh/
中有两个文件,一个是
id\u rsa
文件,另一个是
id\u rsa.pub
。其中,
id\u rsa
必须保密或保密(因此通行短语)。pub文件实际上是一行文本。这一行可以添加到接收主机端的
~/.ssh/authorized_keys
文件中。您可以将密钥添加到文件中;但是也有
ssh copy id
shortcut命令可以做到这一点,还负责文件权限。授权密钥后,当您作为适当的用户连接时,您应该能够从具有私钥的计算机连接到具有授权公钥的计算机。用ssh-v测试它。如果您输入密码短语,系统将提示您输入密码短语;如果没有,您现在已经为自动化做好了准备。您可以使用
ssh代理
在会话之间保持私钥活动,同时只输入一次密码短语。如果您正在进行多个
ssh
跃点,则转发代理的选项将允许通过每个跃点传递来自原始来源框的
ssh代理的私钥。就我个人而言,我觉得这太过分了,因此建议不要使用通行短语

现在,您可以在不输入任何密码或密码的情况下进行
ssh
sftp
scp
连接,接下来的工作就可以自动化了

备选案文1, 如果将
.netrc
宏转换为shell脚本或调用一些
scp
命令的其他脚本,则是首选方案。这类似于使用
curl
wget
自动化所有ftp连接。例如:

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
备选案文2, 使用您提到的
sftp
,您可以使用
expects
命令编写脚本,使用
-b
选项编写脚本,或者将命令管道化到
sftp
。这与
.netrc
宏稍微相似,但与备选方案1相比没有优势。我将展示后者的一个示例:

#!/bin/sh
echo "OK, starting now..."
sftp -b /dev/fd/0 remotehost <<EOF
cd pub
ascii
get filename.txt
bye
EOF
#/垃圾箱/垃圾箱
echo“好的,现在开始…”

sftp-b/dev/fd/0 remotehost如果您可以在计算机上使用无密码身份验证(系统管理员可能会禁止,但通常不会),那么您可以方便地在shell脚本中使用scp,而不是在.netrc中使用宏。但是如果你必须输入一个密码才能登录到远程机器,那么我会使用“herescript”(其中包含EOF的位)来完成这个魔术。如果ftp脚本不时更改,则可以使用shell脚本来编写ftp脚本

谢谢马修。实际上,我的主要目的是使用.netrc中的宏。我可以将其用于SCP吗?SCP和sftp使用相同的无密码登录系统(SSH密钥)。如果你能让scp工作,那么sftp也能工作。这两种方法都不允许您存储密码。如果有人偷了他的.ssh私钥而没有密码短语,这就像他们偷了他的.netrc文件一样糟糕,他们仍然可以将他们想要的任何东西上传到服务器。关键是只从一台你知道永远不会被窃取/破坏的机器上进行自动上传。请了解
ssh copy id
,你已经浪费了太多的文字在一个命令可以完成的事情上了。@ulidtko我相信在这里登陆的人会希望得到一个带有链接和更多细节的答案。您还可以编辑此答案,并在必要时插入ssh copy id的用法。当然,这并不是一个针对所有内容的单一命令,但是可以肯定的是,一旦您拥有一个密钥,您就可以复制它,然后您就可以编写脚本来替换netrc脚本的其余部分。ssh copy id的恼人之处在于,每当您的主机或客户端发生更改时(例如,您购买了一台新计算机)您的旧ssh密钥变得无用,您必须每隔几个月设置一次新密钥。@Sridhar Sarnobat我还有一个不包含ssh-copy-id的发行版。不过,您应该能够在安装新机器时保留身份文件的备份。也许你应该。