【问题标题】:SSH commands from script to remote server not working从脚本到远程服务器的 SSH 命令不起作用
【发布时间】:2016-06-05 00:35:48
【问题描述】:

大家好,

我有以下问题,希望对此提供任何帮助。谢谢。

场景:

我的本​​地服务器(服务器-A)连接到一台远程服务器(服务器-B)。服务器-B 连接到其他 10 台远程服务器(服务器-C...服务器-L)。 Server-A 不直接连接到 (Server-C...Server-L) ,它只通过 Server-B 连接。

我已经设法在以下之间进行 SSH 密钥配对:

Server-A <----> Server-B
Server-B <----> Server-C....Server-L

所以现在我可以使用以下命令从 Server-A 登录到 Server-C:

来自服务器-A:

 ssh user-B@(IP-Server-B) -t ssh user-c@(IP-Server-C)
 ssh -t user-B@(IP-Server-B) -t scp  -oStrictHostKeyChecking=no test.file user-c@(IP-Server-C):/home/user-C

这是我的实际脚本:(从 Server-A 运行)

while read line
do

scp  -oStrictHostKeyChecking=no  test.file user-B@(IP-Server-B):/home/user-B
ssh -t  user-B@(IP-Server-B) -t  scp  -oStrictHostKeyChecking=no test.file mtc@$line:/home/mtc
ssh -t  user-B@(IP-Server-B) -t  ssh  -t -tqn user-c@$line sh /home/user-c/test.file
ssh -t  user-B@(IP-Server-B) -t  scp  user-c@$line:/home/user-c/junk.txt /home/user-B
ssh -t  user-B@(IP-Server-B) -t  ssh  user-c@$line rm -rf /home/user-c/junk.txt
scp  user-B@(IP-Server-B):/home/user-B/junk.txt .
mv junk.txt junk.txt_$line

done < LabIpList

这里是服务器Server-c...Server-L的IP地址列表。

cat LabIpList


1.2.3.4
2.3.4.5
3.4.5.6
4.5.6.7
5.6.7.8
6.7.8.9
7.8.9.10
....
.....

查询:

如果我在命令行上执行上述命令,那么它们可以完美运行,但是如果我将它们放在脚本上,那么它们就会失败。因为两个原因:

  1. tcgetattr:设备的 ioctl 不合适
  2. 不会分配伪终端
  3. 由于最近交换了 SSH 密钥,因此用户必须手动输入 yes 才能将它们添加到 know_hosts。

【问题讨论】:

  • 问题是什么?您是否阅读过有关 ssh_config 的信息,您可以在其中配置您刚刚编码到脚本中的所有内容?
  • 如何管理通过,手动认证新的ssh密钥+通过shell脚本运行SSH命令。

标签: linux shell unix networking ssh


【解决方案1】:

我相信您已经使用 ssh-keygen 创建了无密码登录。请在脚本中使用以下 ssh 选项

ssh -t -t -tq <IP>

【讨论】:

    猜你喜欢
    • 2021-08-21
    • 2010-11-03
    • 2018-02-03
    • 1970-01-01
    • 2015-05-16
    • 1970-01-01
    • 1970-01-01
    • 2015-05-20
    • 1970-01-01
    相关资源
    最近更新 更多