Linux下使用SSH非交互式远程执行命令脚本

原创文章,转载请注明— 作者: 黄文海 出处:  http://viscent.iteye.com/  
   
http://blog.viscenthuang.info  
     非交互式在远程主机上执行命令或者脚本可以帮助我们快速完成一些任务。比如,在集群环境中,同时在各个结点上的日志文件中查询特定的关键字。 
     通过SSH命令远程执行命令首先需要建立相关主机间的信任关系。否则,在执行命令前SSH命令会提示你输入远程主机的密码,这就产生了系统与人的交互,不利于脚本的自动化。建立主机间信任关系的方法如下: 
假设我们有两台主机。主机名分别为linuxa和linuxb。首先在linuxa上以当前用户运行如下命令生成本主机的公钥和私钥文件: 
ssh-keygen -t rsa 
     上述命令执行后,隐藏目录~/.ssh下会出现两个文件:id_rsa和id_rsa.pub。其中,id_rsa.pub为公钥文件。将该文件的内容追加到对端主机linuxb上~/.ssh目录下的authorized_keys文件中。若该文件不存在,可自行创建之。下面是一个id_rsa.pub文件示例的文件内容: 
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAtbW/vKjrIkTfFjSJP9FyVb3kQStc31oBuiKVaCZzoejxSM2+ck6CB09l4BoFujpI0+omL4NptxkEAgkCGnMco2yXrVSOqhqyaQV2BnDPkyMoEq2MGB9hSc9xQKa+Q== viscent@viscent 

     接下来,就可以在不输入密码的情况下在远程主机私执行命令了。命令格式如下: 
     ssh 远程用户名@远程主机IP地址 ‘远程命令或者脚本’ 
     比如, 
    ssh userA@192.168.0.6 'hostname' 
    上述命令执行后,终端输出的是对端主机的主机名,而不是你当前登录的主机的主机名。说明hostname这个命令其实是在对端主机上运行的。 
    若要远程执行脚本,只需要将上面的命令的第三个参数改为要执行的远程脚本的文件名全称即可。比如: 
    ssh userA@192.168.0.6 '/home/userA/script/test.sh' 
    需要特别注意的是:当远程脚本中使用了一些命令,而这些命令被Shell解析器的识别依赖于PATH环境变量时,该脚本需要在其第一行中包含执行profile文件的命令。比如,在Bash中,该脚本的第一行为: 
    source ~/.bashrc 
    否则,远程脚本可能报一些命令无法找到的错误。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值