免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 28310 | 回复: 7

在shell脚本里如何使用SSH 登陆远程主机 [复制链接]

论坛徽章:
0
发表于 2011-05-18 16:08 |显示全部楼层
本帖最后由 situxiaoquan1 于 2011-05-19 18:33 编辑

我的脚本如下:
#!/usr/bin/expect -f

for {set IP 11} {$IP<=14} {incr i 3}
{
spawn ssh $IP
expect "login*"
send "db2inst1\r"
expect "Password:"
send "db2inst1\r"
expect "*>*"
send "cd /home/db2inst1/weihu/activemobile/sorting\r"
expect "*>*"
send "rm 1.txt\r"
expect "*>*"
send "exit\n"
expect eof
}
目前只是登陆一台主机可以实现了,想循环登陆多台执行相同命令怎么做?
执行脚本报错:
wrong # args: should be "for start test next command"
    while executing
"for {set IP 11} {$IP<=14} {incr i 3}"
    (file "./test.sh" line 3)

expect循环应该怎么写呢?

论坛徽章:
0
发表于 2011-05-18 16:09 |显示全部楼层
expect  搜把

论坛徽章:
0
发表于 2011-05-18 20:16 |显示全部楼层
最好配置sshkey

论坛徽章:
0
发表于 2011-05-19 12:01 |显示全部楼层
#!/bin/bash
Username="test"

for IP in `cat ./ipinfo.txt`
do
  ssh $Username@$IP "cd /home/test;pwd;ls"
done

论坛徽章:
0
发表于 2011-05-19 12:04 |显示全部楼层
本帖最后由 Antonio_Zhao 于 2011-05-19 12:06 编辑

建议你使用SSH免密码登陆环境,这样你就不用再处理密码的问题了。

1.ssh 的用户配置主目录为 $USERHOME/.ssh
2.要设置ssh的信任关系必须生成密钥,密钥分为一对,一个是私钥,一个是公钥 。
私钥存储在主登陆主机,公钥存储在所有被登陆主机。
3.确保系统的 /etc/inet/hosts 文件中有双方机器的主机名和IP地址的影射。
4.密钥的生成使用ssh-keygen 命令。适用与SSH版本1
5.ssh-keygen -t dsa for version 2

--------------------------------------------------------------------------------
root@wkst3 # ssh-keygen
Enter file in which to save the key(//.ssh/id_rsa): mykey                       
#为你的密钥起一个名字
Generating public/private rsa key pair.&nbsp;                                       
#创建密钥
Enter passphrase(empty for no passphrase):                                       
#输入你对密钥访问的密码,如果需要免密码登录,密钥访问密码请留空
Enter same passphrase again:                                               
#确认你对密钥访问的密码,如果需要免密码登录,密钥访问密码请留空
Your identification has been saved in mykey                                       
#生成的私钥的文件名为mykey
Your public key has been saved in mykey.pub.                                       
#生成的公钥的文件名为mykey.pub
The key fingerprint is:
md5 1024 a0:32:f6:73:f1:bd:d2:12:b1:00:37:25:6c:40:01:0d
root@wkst3 #ls
mykey &nbsp;&nbsp;&nbsp;mykey.pub

--------------------------------------------------------------------------------
步骤:
1.&nbsp; 首先在本地主机用户主目录下创建.ssh目录
2.&nbsp; 修改.ssh目录的权限为700
3.&nbsp; 在.ssh目录下创建密钥对,如果需要免密码登录,那么在生成密钥对的时候,
密钥访问密码请留空。这里用密钥对mykey / mykey.pub 举例说明
4.&nbsp; 将mykey 改名为identity
5.&nbsp; 修改 identity 的权限值改为600
6.&nbsp; <以下为远程主机设置>
7.&nbsp; 登陆到你要信任登陆的远程主机的用户主目录下,创建.ssh目录
8.&nbsp; 修改.ssh目录的权限为700
9.&nbsp; 将mykey.pub 文件拷贝到.ssh 目录中
10.&nbsp;创建$USERHOME/.ssh/authorized_keys 文件。
     将mykey.pub 文件的内容导入到authorized_keys 文件中.
       # cat mykey.pub >> authorized_keys
       将 authorized_keys 的权限值修改为644

论坛徽章:
0
发表于 2011-05-19 16:06 |显示全部楼层
回复 4# Antonio_Zhao


    运行脚本后提示:
  Password:
   就不动了,怎么输入密码呢?

论坛徽章:
0
发表于 2011-05-19 16:25 |显示全部楼层
本帖最后由 linenoise77 于 2011-05-19 16:27 编辑

#!/usr/bin/expect
set timeout 20
if {$argc < 1} {
  puts "Usage: script IP"
  exit 1
}

foreach IP  $argv {
spawn  ssh user@$IP
expect \
  "(yes/no)?" {
    send "yes\r"
    expect "password" {
      send "yourpassword\r"
    }
  } "password" {
    send "yourpassword\r"
}
expect "\$?"
send "last\r"
expect "\$?"
sleep 10
send "exit\r"
expect eof
}

论坛徽章:
0
发表于 2011-05-23 14:58 |显示全部楼层
回复 1# situxiaoquan1


    问题已解决:
   正确脚本如下:
   #!/usr/bin/expect -f
foreach ip {
192.168.1.11
192.168.1.14
。。。。。#多个IP地址
} {
spawn ssh $IP
expect "login*"
send "db2inst1\r"
expect "Password:"
send "db2inst1\r"
expect "*>*"
send "cd /home/db2inst1/weihu/activemobile/sorting\r"
expect "*>*"
send "rm 1.txt\r"
expect "*>*"
send "exit\n"
expect eof
}
可以通过SSH方式顺序登陆多台主机执行命令
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP