linux 远程ssh免密登录
写在前面
先说说需求:
我们平时开发、运维操作linux过程中经常需要实现将远程文件拷贝到本地或者本地文件拷贝到远程;执行远程命令等操作;这个时候建立ssh免密登录应该是一个比较好的选择;
原理
在linux系统中,ssh是远程登录的默认工具,因为该工具的协议使用了RSA/DSA的非对称加密算法;非对称加密算法会分别产生公钥和私钥;
现在有两台机器:ServerA和ServerB,ServerA需要免密登录ServerB,我们先在ServerA生成公钥和私钥,把公钥拷贝到ServerB指定的文件下,ServerA就可以免密登录ServerB了;
以下方法一和方法二都是使用依据上面的原理实现;
方法一:使用ssh-copy-id 命令拷贝密钥:
1、ServerA执行ssh-keygen
生成公私钥;
ssh-keygen
公私钥 默认生成路径
/root/.ssh
(这里的root是用户名,如果你是其他用户替换即可)如图:这里会让你输入密钥的保护密码,我这里是一路回车(也就是不设置密钥密码)
生成的/root/.ssh
的文件:
2、使用ssh-copy-id
将公钥复制到ServerB中(windos不支持)
ssh-copy-id -i id_rsa.pub文件 ServerB用户名@ServerB_Ip
#示例
ssh-copy-id -i /root/.ssh/id_rsa.pub root@139.199.196.67
这个过程需要输入ServerB对应用户密码。下图添加成功。
ok,搞定。
3、测试
ServerA执行:
ssh root@ServerB_Ip date
#示例
ssh root@139.199.196.67 date
得到:
Sat Jan 12 15:22:17 CST 2019
成功!
方法二:手工拷贝密钥(Windows适用)
其实手工拷贝跟方法一的使用命令拷贝差不多,就是操作上原始一点;
1、生成公私钥:同方法一的步骤1;
2、手动将步骤1中ServerA生成的/root/.ssh/id_rsa.pub
拷贝到ServerB的/root/.ssh
目录下并重命名为authorized_keys
3、测试:同方法一的步骤3;
多个机器都想免密登录的话,直接把.pub
文件追加在authorized_keys
文件末尾就行
示例:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQClwibMj/HJmjcuLYu1v2QXQQ4xXl7KGIuZrAj616ZTa3ju8A+/zY7PzukbWbByvgkh+900IyrxjZIx5E0WdEUe0GmItOMTBWj815hqqH41ZC1BCBZoXbxz4M3DOfoGkgIj8EoB+8+tyNTlSj/lwRm7Zgu9BG/NkckawbnGSVc4PNNyl3YT8DbDp9iOA2hqC3RwHpl4py4N2yLaS1py4HaeLLfCyV5i8mFkRdr4UF9O1QEqKsEAuu/3aQVGuRijAw6hHr/5gMdVD0oJcni0R34DYe/Dymw1Doqp6gDT1KubTth8f1frS7L/RGXZ3NAeVhHtIYRLLOB0MBRlqCv3uCSI5IAir/kjsja35tzep7m4GjuWHF761XTxMFYmCPUaXHDNkiGgaclI5WQzyTuD3iMp3qupttFGWyYlp1tWdutjrj+oceesFlYb4pMVaKd24xfVq3pUhZk=
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCzWNccmjdazKgVGJI/MpDfWbubb11m4RukgWZpNCq1RZponBzwQ2Ln5S7PqPM4AYI1P1wZB/WcOffevt40kfH+N3QqmjNxEvORpoDt+RD57yRkmEYOnijdGU4L2LD8ZaLfRjDIlvdIyVQ1udhcFgkn6XDlEv2qskuKs5Sm1RZh8IsxOoPV6n3Idf33BxfL9jtQMLkiicaSyayBuDhuf7AZ5bWqcj3yl8OhS1S8eWtU5fdfHQRoYoJXHyp7CjPUoJwiijuvu1UY3aywHOCuFPSUjOZh2ZvCxDFpDbJb9aDctDGqQijghYa7qHB0hl/igain5OeMh4bMKif3xBRURg6cV2Zi0T7odyKzmwQnMSIDljVpJz/WyubHoA2gI61yiFJlLeKREt59xigy0Fv52RasXMh27YbSGWFUK4tJXqdfOxlJ8UbGfey5l9vR6D/B8= heng\heng@HENG