将 .netrc 与 sftp 一起使用

问题描述 投票:0回答:4

我有一些现有的脚本,其中使用 ftp + .netrc。

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

还有其他选择吗?

请帮忙。

ftp macros sftp
4个回答
23
投票

简单来说,

.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
进行测试。如果您输入了密码,系统将提示您输入;如果您没有这样做,那么您现在已经准备好自动化了。您可以使用
ssh-agent
在会话之间保持私钥处于活动状态,同时仅输入密码短语一次。如果您要进行多个
ssh
跃点,转发代理的选项将允许通过每个跃点传送来自原始来源框
ssh-agent
的私钥。我个人认为这有点过度,因此建议不要使用密码。

现在您可以建立

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

替代方案3,

使用

sftp
程序,该程序允许您存储密码等连接参数,从而打破了SSH标准。例如,使用 cyberduck 和 AppleScript,或 FileZilla 和队列。

进一步说明:

有一个

~/.ssh/config
文件 您可以使用 为主机名提供较短的名称,设置转发参数、默认目录、默认用户名以及每个主机的特定身份。我也喜欢
-l
scp
选项,它将我的传输速率限制在更合理的水平。

附注您可能会认为有一个工具可以将

.netrc
宏转换为(替代 1 样式)shell 脚本。但我什么也没找到。这是一个微小的利基商机吗?


2
投票

如果您可以在计算机上使用无密码身份验证(这可能会被系统管理员禁止,但通常不会),那么您可以方便地在 shell 脚本中使用 scp,而不是在 .netrc 中使用宏。但是,如果您必须输入密码才能登录远程计算机,那么我将使用“此处脚本”(其中带有 EOF 的位)来实现魔法。如果 ftp 脚本不时发生变化,您可以使用 shell 脚本来编写它。


0
投票

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

您也许可以对 SFTP 使用相同的技术,我不确定。


0
投票

您可以使用lftp调用sftp:// URL。它遵循 .netrc 文件。

© www.soinside.com 2019 - 2024. All rights reserved.