注:本文为自己学习使用,如有问题欢迎在评论区留言~么么哒
一、rsync远程传输避免密码输入
每次rsync远程传输时都需要输入用户在远程机器上的密码,这样导致无法在后台自动运行rsync,可采用秘钥文件来替代人工输入密码的方式来解决。
第一步 在本地机器上使用ssh-keygen -t rsa 生成秘钥
(一路回车即可)
注意: 在提示输入key file path时,为避免覆盖已有的root帐户的id_rsa文件,将其存储到/usr/rsync_id_dsa 在提示输入文件密码时,直接按回车,采用空密码 最后生成了两个文件,分别存储私钥和公钥
[root@xxxx ~]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): /usr/rsync_id_dsa
Enter passphrase (empty for no passphrase): //输入空
Enter same passphrase again: //输入空
Your identification has been saved in /usr/rsync_id_dsa.
Your public key has been saved in /usr/rsync_id_dsa.pub.
注意: 在提示输入key file path时,为避免覆盖已有的root帐户的id_rsa文件,将其存储到/usr/rsync_id_dsa 在提示输入文件密码时,直接按回车,采用空密码 最后生成了两个文件,分别存储私钥和公钥
第二步 将本地机器上的公钥传送到远端机器对应账户的.ssh目录下 (以csdn为例)
$ scp /usr/rsync_id_dsa.pub root@171.69.201.209:/home/csdn/.ssh
第三步 在远程机器上将得到的公钥导入对应账号的authorized_keys文件中 (以csdn为例)
$ cd /home/csdn/.ssh
$ cat rsync_id_dsa.pub >> authorized_keys # 使用 >> 防止覆盖 这样可以实现多个客户端的免密码登录
$ chown csdn:csdn authorized_keys # 不是必须
设置完成后,每次使用rsync时,添加 -i 参数 就可以避免每次输入密码了
二## 提示Host key verification failed
1、第一步
1、 在 .ssh目录下添加config文件,cd ~/.ssh 键入
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
2、删除 .ssh/know_hosts中对应ip的相关rsa信息
2、如果"Permission denied
首先在服务器本地测试ssh 127.0.0.1,如果可以那就是防火墙的问题。网上很多解决方法,这里不在写,很好解决。
若本地连接有问题,首先打开配置文件sshd_config寻找问题(vim /etc/ssh/sshd_config)。这里简单总结几个必须要修改的配置:
RSAAuthentication yes
PubkeyAuthentication yes #这两项为打开公钥模式
AuthorizedKeysFile .ssh/authorized_keys #配置公钥记录文件
PasswordAuthentication yes #打开密码验证模式
具体:
1、chmod 600/etc/ssh/sshd_config
2、vi /etc/ssh/sshd_config
3、将下面配置的注释放开:
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
4、vi authorized_keys
追加了本机的id_rsa.pub内容
id_rsa.pub目录:~/.ssh/id_rsa.pub
3、如果不能切换到jenkins
由于某种原因,你想login为jenkins,你可以这样做: sudo su -s /bin/bash jenkins
如果想要切换到root: su -
你需要修改 / etc / passwd 允许用户jenkins login:应该有类似/ bin / bash或/ bin / sh ,当然不是/ bin / false在行尾。如果不是你需要修改
4、现在可以具体操作了
1、chmod 600 /etc/sudoers
2、visudo
添加以下内容:
root ALL=(ALL) ALL # 原有的
jenkins ALL=(ALL) NOPASSWD:/usr/bin/ssh,/usr/bin/rsync # 新增的
中间的空隙不是空格,而是tab,命令和命令之间要用逗号,保存退出后,将权限改为440,而不是400,最后用visudo -c检查语法是否出错.
3、# 给jenkins生成密钥对:在jenkins用户下
ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub root@slave主机ip
ssh root@slave主机ip
如图:
4、 此时是完成了第二步,但还没有操作第一步,在文件末尾添加一行,就这么一行就有很多要注意的地方,首先修改文件权限为600,然后用viduso去修改文件,中间的空隙不是空格,而是tab,命令和命令之间要用逗号,保存退出后,将权限改为440,而不是400,最后用visudo -c检查语法是否出错.
visudo后加进去这些:root ALL=(ALL) ALL # 原有的
jenkins ALL=(ALL) NOPASSWD:/usr/bin/ssh,/usr/bin/rsync # 新增的
5、补充:
需要保证jenkins中使用的是jenkins用户:
进去jenkins——》Manage Jekins——》Status Information——》System Information——》user.name 为jenkins表示使用的jenkins用户
5、补充小知识
配置SSH免密码登录
(1)输入“ssh-keygen -t rsa”,接着按三次“Enter”键。
生成私有密钥id_rsa和公有密钥id_rsa.pub两个文件。
ssh-keygen用来生成RSA类型的密钥以及管理该密钥,参数“-”用于指定要创建的SSH密钥的类型为RSA
(2)用 ssh-copy-id 将公钥复制到远程机器中。
ssh-copy-id -i /root/.ssh/id_rsa.pub master
//依次输入yes, root用户的密码
ssh-copy-id -i /root/.ssh/id_rsa.pub slave1
//依次输入yes, root用户的密码
ssh-copy-id -i /root/.ssh/id_rsa.pub slave2
//依次输入yes, root用户的密码
ssh-copy-id -i /root/.ssh/id_rsa.pub slave3
//依次输入yes, root用户的密码
(3)验证SSH是否能够无密钥登录
在master下分别输入:ssh slave1、ssh slave2、ssh slave3
如图所示即配置SSH免密码登录成功。
常见问题的解决途径:
1.用 ssh-copy-id 将公钥复制到远程机器中时,master 应为自己的主机名。
查看自己主机名为: hostname
2.查看是否IP地址有错误:
(1)命令"ssh root@主机或节点的IP地址"(主机用主机IP,节点用节点IP)
例如我个人的主机IP:ssh root@192.168.80.130
(2)命令"vi /etc/hosts"检查是否之前写错主机和各个节点的IP,如有错误尽快修改正确的对应IP。
3.若最终没发现问题,无法解决,建议清楚所有的节点和主虚拟机,重新开始配置,文件改写需谨慎,写错不易找出问题