Linux服务器之间怎么免密码登录复制文件

Linux服务器之间怎么免密码登录复制文件,第1张

你是要让服务器使用密码登录呢
要让其使用密码登录,,修改/etc/sshd/有一个叫sshd_config的文件类似修改其配置
还是要让其之间不使用密码登录呢?
不使用密码
ssh基于密钥通信,,你百度一下嘻嘻

用SSL加密Key实现自动登录
需要材料:
1 被管理的SSH服务器一台。
2 管理端电脑一台。
环境:
管理服务器: ip:19216801 机器名:server
被管理服务器:ip:19216802 机器名:client
生成密钥对:
生成公钥密钥对是在管理服务器上生成的:
[root@server ~]# ssh-keygen -b 1024 -t rsa
Generating public/private rsa key pair #提示正在生成rsa密钥对
Enter file in which to save the key (/home/usrname/ssh/id_dsa): #询问公钥和私钥存放的位置,回车用默认位置即可
Enter passphrase (empty for no passphrase): #询问输入私钥密语,输入密语
Enter same passphrase again: #再次提示输入密语确认
Your identification has been saved in /home/usrname/ssh/id_dsa #提示公钥和私钥已经存放在/root/ssh/目录下
Your public key has been saved in /home/usrname/ssh/id_dsapub
The key fingerprint is:
x6:68:xx:93:98:8x:87:95:7x:2x:4x:x9:81:xx:56:94 root@server #提示key的指纹
拷贝你的公钥到被管理的服务器上
在你的管理服务器上把你的公钥拷贝到被管理服务器上要进行自动登陆的用户目录下。
[root@server ~]# scp ssh/id_dsapub remote_usrname@19216802: #比如你想使用用户peter登陆,则remote_usrname请以peter代替
改名和进行权限设置
登陆被管理的服务器,进入需要远程登陆的用户目录,把公钥放到用户目录的 ssh 这个目录下(如果目录不存在,需要创建~/ssh目录,并把目录权限设置为700),把公钥改名为authorized_keys2,并且把它的用户权限设成600。
[peter@client ~]$ ls
id_rsapub
[peter@client ~]$ mkdir ~/ssh #如果当前用户目录下没有 ssh 目录,请先创建目录
[peter@client ~]$ chmod 700 ~/ssh
[peter@client ~]$ mv id_rsapub ~/ssh
[peter@client ~]$ cd ~/ssh
[peter@client ~]$ cat id_rsapub >> authorized_keys2
[peter@client ~]$ rm -f id_rsapub
[peter@client ~]$ chmod 600 authorized_keys2
[peter@client ~]$ ls -l
total 4
-rw------- 1 peter peter 225 Oct 10 11:28 authorized_keys2
测试使用密钥对进行远程登陆
[root@server ~]# ssh peter@19216802
Enter passphrase for key '/root/ssh/id_rsa': #提示输入密码短语,请输入刚才设置的密码短语
Last login: Sun Oct 10 11:32:14 2010 from 19216801
[peter@client ~]$
如果你不能用正确的登录,应该重新检查一下你的authorized_keys2的权限。也可能要检查ssh目录的权限。
使用 ssh-agent(ssh代理)自动输入密码短语
牢记你的“密码短句”,现在你可以用你的密钥而不是密码来登录你的服务器了,但是这样仍然没有省什么事,你还是要输入密钥的“密码短语”。有更简便的方法吗?答案就是采用SSH代理(ssh-agent),一个用来帮你记住“密码短语”的程序。 ssh-agent是OpenSSH中默认包括的ssh代理程序。
登陆管理服务器
[root@server ~]# ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-vEGjCM2147/agent2147; export SSH_AUTH_SOCK;
SSH_AGENT_PID=2148; export SSH_AGENT_PID;
echo Agent pid 2148;
当你运行ssh-agent,它会打印出来它使用的 ssh 的环境和变量。要使用这些变量,有两种方法,一种是手动进行声明环境变量,另一种是运行eval命令自动声明环境变量。
方法一:手动声明环境变量
[root@server ~]# SSH_AUTH_SOCK=/tmp/ssh-vEGjCM2147/agent2147; export SSH_AUTH_SOCK;
[root@server ~]# SSH_AGENT_PID=2148; export SSH_AGENT_PID;
[root@server ~]# printenv | grep SSH #检查 ssh 环境变量是否已经加入当前会话的环境变量
SSH_AGENT_PID=2148
SSH_AUTH_SOCK=/tmp/ssh-vEGjCM2147/agent2147
方法二:运行eval命令自动声明环境变量
[root@server ~]# eval `ssh-agent`
Agent pid 2157
[root@server ~]# printenv | grep SSH #检查 ssh 环境变量是否已经加入当前会话的环境变量
SSH_AGENT_PID=2148
SSH_AUTH_SOCK=/tmp/ssh-vEGjCM2147/agent2147
现在 ssh-agent 已经在运行了,但是 ssh-agent 里面是空白的不会有解密的专用密钥。我们要告诉它我们有私钥和这个私钥在哪儿。这就需要使用 ssh-add 命令把我们的专用密钥添加到 ssh-agent 的高速缓存中。
[root@server ~]# ssh-add ~/ssh/id_dsa
Enter passphrase for /home/user/ssh/id_dsa: #输入你的密码短语
Identity added: /home/user/ssh/id_dsa (/home/user/ssh/id_dsa)
[root@server ~]# ssh-add -l #查看 ssh代理的缓存内容
1024 72:78:5e:6b:16:fd:f2:8c:81:b1:18:e6:9f:77:6e:be /root/ssh/id_rsa (RSA)
输入了密码短句,现在好了,你可以登录你的远程服务器而不用输入你的密码短语了,而且你的私钥是密码保护的。

1Linux下生成密钥
ssh-keygen的命令手册,通过”man ssh-keygen“命令:
通过命令”ssh-keygen -t rsa“
生成之后会在用户的根目录生成一个 “ssh”的文件夹
进入“ssh”会生成以下几个文件
authorized_keys:存放远程免密登录的公钥,主要通过这个文件记录多台机器的公钥
id_rsa : 生成的私钥文件
id_rsapub :生成的公钥文件
know_hosts : 已知的主机公钥清单
如果希望ssh公钥生效需满足至少下面两个条件:
1) ssh目录的权限必须是700
2) ssh/authorized_keys文件权限必须是600
2远程免密登录
原理图:
常用以下几种方法:
21 通过ssh-copy-id的方式
命令: ssh-copy-id -i ~/ssh/id_rsaput <romte_ip>
举例:
[root@test ssh]# ssh-copy-id -i ~/ssh/id_rsapub 19216891135
root@19216891135's password:
Now try logging into the machine, with "ssh '19216891135'", andcheck in:
ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting
[root@test ssh]# ssh root@19216891135
Last login: Mon Oct 10 01:25:49 2016 from 19216891133
[root@localhost ~]#
常见错误:
[root@test ~]# ssh-copy-id -i~/ssh/id_rsapub 19216891135
-bash: ssh-copy-id: command not found //提示命令不存在
解决办法:yum -y installopenssh-clients
22 通过scp将内容写到对方的文件中
命令:scp -p~/ssh/id_rsapub root@<remote_ip>:/root/ssh/authorized_keys
举例:
[root@test ssh]# scp -p ~/ssh/id_rsapubroot@19216891135:/root/ssh/authorized_keys
root@19216891135's password:
id_rsapub 100% 408 04KB/s 00:00
[root@test ssh]#
[root@test ssh]#
[root@test ssh]#
[root@test ssh]# ssh root@19216891135
Last login: Mon Oct 10 01:27:02 2016 from 19216891133
[root@localhost ~]#
也可以分为两步 *** 作:
$ scp ~/ssh/id_rsapubroot@<remote_ip>:pub_key //将文件拷贝至远程服务器
$ cat ~/pub_key>>~/ssh/authorized_keys //将内容追加到authorized_keys文件中,不过要登录远程服务器来执行这条命令
23 通过Ansible实现批量免密
231 将需要做免密 *** 作的机器hosts添加到/etc/ansible/hosts下:
[Avoid close]
19216891132
19216891133
19216891134
232 执行命令进行免密 *** 作
ansible<groupname> -m authorized_key -a "user=root key='{{lookup('file','/root/ssh/id_rsapub') }}'" -k
示例:
[root@test sshpass-105]# ansible test -m authorized_key -a"user=root key='{{ lookup('file','/root/ssh/id_rsapub') }}'" -k
SSH password: ----->输入密码
19216891135 | success >> {
"changed": true,
"key": "ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEArZI4kxlYuw7j1nt5ueIpTPWfGBJoZ8Mb02OJHR8yGW7A3izwT3/uhkK7RkaGavBbAlprp5bxp3i0TyNxa/apBQG5NiqhYO8YCuiGYGsQAGwZCBlNLF3gq1/18B6FV5moE/8yTbFA4dBQahdtVP PejLlSAbb5ZoGK8AtLlcRq49IENoXB99tnFVn3gMM0aX24ido1ZF9RfRWzfYF7bVsLsrIiMPmVNe5KaGL9kZ0svzoZ708yjWQQCEYWp0m+sODbtGPC34HMGAHjFlsC/SJffLuT/ug/hhCJUYeExHIkJF8OyvfC6DeF7ArI6zdKER7D8M0SMWQmpKUltj2nltuv3w== root@localhostlocaldomain",
"key_options": null,
"keyfile": "/root/ssh/authorized_keys",
"manage_dir": true,
"path": null,
"state": "present",
"unique": false,
"user": "root"
}
[root@test sshpass-105]#
24 手工复制粘贴的方式
将本地id_rsapub文件的内容拷贝至远程服务器的~/ssh/authorized_keys文件中


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

原文地址: https://outofmemory.cn/zz/12778422.html

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

发表评论

登录后才能评论

评论列表(0条)

保存