Linux远程无密码登陆并远程执行脚本

假设 A (192.168.20.59)为客户机器,B(192.168.20.60)为目标机;

要达到的目的:
A机器ssh登录B机器无需输入密码;
加密方式选 rsa|dsa均可以,默认dsa

ssh-keygen -t rsa #使用rsa加密

二、具体操作流程

单向登陆的操作过程(能满足上边的目的):
1、登录A机器
2、ssh-keygen -t
[rsa|dsa],将会生成密钥文件和私钥文件 id_rsa,id_rsa.pub或id_dsa,id_dsa.pub

Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): [直接回车即可]
Enter passphrase (empty for no passphrase): [若要建立无密码的ssh信任关系,这里直接回车!否则建立信任关系后,每次登陆远程机器均要求输入该密码]
Enter same passphrase again: [直接回车]
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
b4:de:66:2c:c1:04:ad:7c:48:7c:f7:94:71:09:85:21 usr1@localhost


3、在B机创建目录:mkdir /root/.ssh

将 .pub 文件复制到B机器的 .ssh 目录, 并

cat /root/.ssh/id_dsa.pub >> /root/.ssh/authorized_keys

或者

cat /root/.ssh/id_rsa.pub | ssh root@192.168.20.60  'cat >> /root/.ssh/authorized_keys'
4、大功告成,从A机器登录B机器的目标账户,不再需要密码了;(直接运行 #ssh 192.168.20.60

双向登陆的操作过程:

1、ssh-keygen做密码验证可以使在向对方机器上ssh ,scp不用使用密码.具体方法如下:
2、两个节点都执行操作:#ssh-keygen -t rsa
  然后全部回车,采用默认值.

3、这样生成了一对密钥,存放在用户目录的/root/.ssh下。
将公钥考到对方机器的用户目录下 ,并将其复制到/root/.ssh/authorized_keys中(操作命令:#cat /root/.ssh/id_dsa.pub >> /root/.ssh/authorized_keys )。

4、设置文件和目录权限:

设置authorized_keys权限
$ chmod 600 authorized_keys
设置.ssh目录权限
$ chmod 700 -R .ssh

5、要保证.ssh和authorized_keys都只有用户自己有写权限。否则验证无效。(今天就是遇到这个问题,找了好久问题所在),其实仔细想想,这样做是为了不会出现系统漏洞。

远程执行脚本示例:

1、在A机创建脚本:

$ vi test.sh

#!/bin/bash
echo "shell start"
ssh root@192.168.20.60 "sh /home/script/hello.sh"

2、在B机创建脚本

$ vi /home/script/hello.sh

#!/bin/bash
echo "hello"

3、在A机运行脚本test.sh

$ sh test.sh

shell start
hello
原文地址:https://www.cnblogs.com/sandea/p/4899413.html