Linux 下实现SSH互信

Linux 下实现SSH互信,第1张

一、准备两台服务器:

A机:192.168.1.1

B机:192.168.1.2

二、双机建立信任

1、在A机生成秘钥证书

在root下执行ssh-keygen命令,一路回车,生成秘钥证书

# ssh-keygen  -t  rsa  

2、查看生成秘钥文件

# cd ~/.ssh  

# ll

文件:私钥证书id_rsa、公钥证书id_rsa.pub

3、A对B建立信任关系

3.1 将公钥证书id_rsa.pub复制到机器B的root家目录的.ssh子目录中,同时将文件名更换为authorized_keys

# scp -r id_rsa.pub root@192.168.1.2:/root/.ssh/authorized_keys

3.2 若3.1报错:No such file or directory

使用:# ssh-copy-id -i id_rsa.pub root@192.168.1.2

ssh-copy-id命令会自动将id_rsa.pub文件的内容追加到远程主机root用户下.ssh/authorized_keys文件中

3.3 查看B机器是否接收

# ssh 192.168.1.2  

# cd .ssh/   

# ls   

# cat authorized_keys

# exit

3.4 B对A建立信任,同上3的 *** 作步骤

在 linux 系统管理中,设置免密码登录,进行机器的批量管理是最常用的一个方法。比如针对几十甚至上百台线上机器,通常我们会设置一台“发布机”作为中央控制机对其它线上机器免密码登录,然后进行软件、配置文件的分发、更新、部署。当然了,针对上面的问题,解决方案并非最优且唯一,比如你也可以用 expect 模拟自动输入来完成自动登录验证这一过程,或者用现在一些开源的软件自动化配置和部署工具,比如 Puppet,但这都不在本文的讨论范畴,今天咱们要说的就是这种最原始、最有效、最直接的方式:免密码登录。

(1)问题:

假设:现有2台机器

1、个人机192.168.1.110

2、服务器192.168.1.112

要使110无需密码通过ssh登入112

(2)步骤

1、创建密钥

2、复制公密到服务器

3、添加公密到192.168.112的信任区域

注: 2,3两步可由命令ssh-copy-id一步到位

4、测试

此时整个步骤已经完成,你可以尝试 ssh ip 或者 /etc/hosts 中的主机名试试。

(3)可能遇到的问题

1、在使用 ssh-copy-id 错误提示

表现:

公钥,私钥已经生成,执行上述命令完毕出现如下错误:

$ ssh-copy-id remote-machine

/usr/bin/ssh-copy-id: ERROR: No identities found

解决方法:

g 之发现缺少公钥路径,通过 -i 加上即可:

2、ssh ip 可以成功登录,ssh hostname 却失败

表现:

ssh hostname

ssh: connect to host localhost port 22: Connection refused

解决方法:

看下对方的主机名是不是在 /etc/hosts 文件中和 ip 做了映射,没有就加上即可。

3、ssh 的配置目录权限问题

由于 ssh 的权限直接关系到服务器的安全问题,因此 ssh 每次读取配置都会校验相关文件夹和文件的权限,以防止权限过大对外暴露。

表现:

设置了.ssh目录,在authorized_keys设置了key后登录还提示需要输入密码。

解决方法:

注意权限,.ssh权限700,authorized_keys权限600,就KO啦!

chmod 700 ~/.ssh/

chmod 600 ~/.ssh/authorized_keys

4、ssh localhost:publickey 授权失败

注:ssh可同时支持publickey和password两种授权方式,publickey默认不开启,需要配置为yes。

如果客户端不存在.ssh/id_rsa,则使用password授权;存在则使用publickey授权;

如果publickey授权失败,依然会继续使用password授权。

不要设置 PasswordAuthentication no ,它的意思是禁止密码登录,这样就只能本机登录了!

5、ssh localhost:Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

最后重启你的 linux 执行 ssh localhost

6、ssh localhost:需要密码

cat ~/.ssh/id_rsa.pub >>~/.ssh/authorized_keys

7、ssh ip 或 hostname 均提示:connection refused

目标主机的ssh server端程序是否安装、服务是否启动,是否在侦听22端口;

是否允许该用户登录;

本机是否设置了iptables规则,禁止了ssh的连入/连出;

具体请参考: http://hi.baidu.com/leejun_2005/item/bfc0ded296cb8ebf32db907e

(4)最后的问题

本文介绍的建立基于免密码登录,双机互信的管理方式简单、直接,但是安全就是个问题了,稍有不慎容易被一锅端,建议加上防火墙的端口、ip 策略,有条件的话试试动态口令,这样会更稳妥些。再有就是当机器规模达到上百、上千台的时候,如果对文件数据、机器状态的实时同步、一致性的要求很高的时候,这种管理方式的弊端就出来了。

(5)Refer:

http://blogread.cn/it/article/6103?f=wb ssh-copy-id帮你建立信任

http://www.lvtao.net/server/54.html ssh无密码登入设置 ssh-keygen ssh-copy-id

http://hi.baidu.com/leejun_2005/item/bfc0ded296cb8ebf32db907e SSH的安装及登录提示:connection refused的解决办法

http://www.cnblogs.com/qcly/archive/2013/07/27/3219535.html 一次由SELinux引起的ssh公钥认证失败问题

问题:Jenkins默认使用jenkins用户去启动,jenkins用户并没有权限去执行ssh免密登陆,所以导致执行失败 注:配置linux双机互信后,jenkins也需要将公钥加入到目标机器,才能达到shell脚本中scp免密传输的条件 一、验证登录 1、切换jenkins用户 # su jenkins 切换后还是root账号 2、分析解决: 2.1 应该是/etc/passwd文件中的/bin/bash被yum安装的时候变成了/bin/false # vim /etc/passwd jenkins:x:990:988:Jenkins Automation Server:/var/lib/jenkins:/bin/false( bash)将bin/false改为/bin/bash 再次执行切换 # su jenkins bash-4.1$ 2.2  结果命令提示符的用户名不是jenkins而变成了 bash-4.1$,原因是在安装jenkins时,jenkins只是创建了jenkins用户,并没有为其创建home目录 # vim ~/.bash_profile 在文件的最后添加 export PS1='[\u@\h \W]\$',执行文件使修改项起作用 # source ~/.bash_profile 验证是否成功   # su jenkins 二、为jenkins系统用户开启免密登录 1、在Jenkins的使用过程中,如果在脚本中使用到sudo命令,有可能出现如下所示的错误: sudo: no tty present and no askpass program specified 这是因为Jenkins服务器在执行sudo命令时的上下文有误,导致这个命令执行的异常。 2.1 解决方法: # sudo visudo 在文件末尾加上jenkins ALL=(ALL) NOPASSWD: ALL 2.2 重启jenkins,测试 # su jenkins # sudo su -s /bin/bash jenkins 测试成功,jenkins免密登录成功。 PS:如果误 *** 作修改了/etc/sudoers的权限来修改上述文件,则会导致如下所示的错误: sudo :/etc/sudoers is world writable sudo : no valid sudoers source found, quitting sudo : unable to initialize poling plugin 这是Linux的一种保护机制。因此,如果出现上述误 *** 作,则需要执行如下命令来解决: $ pkexec chmod 0440 /etc/sudoers 三、jenkins用户开通ssh免密登录 1、安装ssh # yum install ssh 1.1 将ssh服务设置开机自启 # sudo systemctl enable sshd 1.2 启动ssh # sudo systemctl start sshd 2、生成jenkins用户秘钥证书 # su jenkins # ssh-keygen -t rsa 2.1 查看是否生成成功 # /var/lib/jenkins/.ssh/ # ls 3、将公钥传输到目标linux系统 ssh-copy-id -i /var/lib/jenkins/.ssh/id_rsa.pub root@目标ip:path------------------------------------------------------------------------------------------ 参考:https://blog.csdn.net/weixin_43840640/article/details/90371472


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7362633.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-04
下一篇2023-04-04

发表评论

登录后才能评论

评论列表(0条)

    保存