ssh登录远程服务器:
[-l login_name]
Ssh –l root remotehost
修改端口号:
[-p port]
Ssh –p portnumber remoteuser@remotehost
登录远程服务器并执行命令并返回到本地:
[user@]hostname [command]
Ssh remoteuser@remotehost hostname
公钥加密(client),私钥解密(server) RSA
Ssh 是自签名证书 #自己生成公钥和私钥
证书文件位置:
Server:
私钥 /etc/ssh/ssh_host_key
公钥 /etc/ssh/ssh_host_key.pub
Client
~/.ssh/know_hosts #这个文件是server给的公钥
在server上:
[root@server0 ssh]# pwd
/etc/ssh
[root@server0 ssh]# ll ssh_host*
-rw-r-----.1 root ssh_keys 227 Jul 11 2014 ssh_host_ecdsa_key #私钥
-rw-r--r--. 1 root root 162 Jul 11 2014 ssh_host_ecdsa_key.pub #公钥
-rw-r-----.1 root ssh_keys 1675 Jul 11 2014 ssh_host_rsa_key #私钥
-rw-r--r--. 1 root root 382 Jul 11 2014 ssh_host_rsa_key.pub #公钥
在client上:
[root@server0 .ssh]# cat known_hosts
172.25.0.10 ecdsa-sha2-nistp256AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBHX+o9KAnlfw2dE7CsmM4hqfv1udM79a5NWC2BuWlmfKSwfYLptPQMJF8bnqaz0EjDlxCxRu/aito+GphPLzp/k=
基于公钥的身份验证:客户端不需要输入密码就可以连接到服务端
client
生成公钥私钥对:
~/.ssh/id_rsa
~/.ssh/id_rsa.pub
原理:
client发送公钥给server端:~/.ssh/id_rsa.pub
服务端
用client的公钥+随机数 发送给client
客户端:
使用私钥解密server端发过来的数据
使用私钥加密服务器发过来的随机数(签名),发送给server
服务端:
用client的公钥来解密client发过来随机数,解出来的随机数如果跟server端发过去的随机数一样,则验证了发过来的数据是client发来的,完成client与server端的身份验证
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
配置过程:
在client上面:
生成密钥对:
[root@desktop0 ~]# ssh-keygen #生成密钥对
Generating public/private rsa key pair.
Enter file in which to save the key(/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
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:
18:55:4e:f2:71:a9:b9:23:02:83:3e:79:fb:ec:f7:dfroot@desktop0.example.com
The key's randomart image is:
+--[ RSA 2048]----+
| o.+ .. |
| . = o. |
| . . oo |
| .o o o |
| . . o. S . |
| +. . . o |
| o. . . . |
| .. . . |
| o+. .... E |
[root@desktop0 .ssh]# pwd
/root/.ssh
[root@desktop0 .ssh]# ll
total 16
-rw-------. 1 root root 1243 Aug 13 2015 authorized_keys
-rw-------.1 root root 1675 Jan 20 17:53 id_rsa #生成的私钥
-rw-r--r--.1 root root 407 Jan 20 17:53 id_rsa.pub #生成的公钥
-rw-r--r--. 1 root root 173 Jan 20 17:41 known_hosts
将client的公钥传给server端:
[root@desktop0 .ssh]# ssh-copy-id root@172.25.0.11
/usr/bin/ssh-copy-id: INFO: attempting tolog in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remainto be installed -- if you are prompted now it is to install the new keys
root@172.25.0.11's password:
Number of key(s) added: 1
Now try logging into the machine,with: "ssh 'root@172.25.0.11'"
and check to make sure that only the key(s)you wanted were added.
查看server端传过来的client的公钥:
[root@server0 .ssh]# pwd
/root/.ssh
[root@server0 .ssh]# ll
total 4
-rw-------. 1 root root 407 Jan 20 17:56authorized_keys
现在在client可以直接登录到server
[root@desktop0.ssh]# ssh root@172.25.0.11
Last login: Sat Jan 20 17:58:03 2018 fromdesktop0.example.com
[root@server0 ~]#
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
SSH登录系统,条件验证顺序:先验证公钥,再验证密码
SSH即可以做为服务端,也可能做为客户端:
ssh作为服务端的配置文件
Vim /etc/ssh/config
禁止root用户使用SSH登录:
PermitRootLogin no
允许root连接,只能使用密钥连接,不能使用密码连接:
PermitRootLogin without-password
是否允许所有用户使用密码验证:
PasswordAuthentication no #只能使用密钥认证,不能使用密码验证
Ssh作为客户端的配置文件:
[root@server0 ssh]# pwd
/etc/ssh
[root@server0 ssh]# ll ssh_config
-rw-r--r--. 1 root root 2123 Mar 20 2014 ssh_config
[root@server0 ssh]# ll
total 268
-rw-------. 1 root root 242153 Mar 20 2014 moduli
-rw-r--r--. 1 root root 2123 Mar 20 2014 ssh_config #ssh 做为客户端的配置文件
-rw-r--r--. 1 root root 4439 Jul 11 2014 sshd_config #ssh 做为服务端的配置文件
-rw-r-----. 1 root ssh_keys 227 Jul 11 2014 ssh_host_ecdsa_key
-rw-r--r--. 1 root root 162 Jul 11 2014 ssh_host_ecdsa_key.pub
-rw-r-----. 1 root ssh_keys 1675 Jul 11 2014 ssh_host_rsa_key
-rw-r--r--. 1 root root 382 Jul 11 2014 ssh_host_rsa_key.pub
Vim /etc/ssh/sshd_config配置文件详解:
#Port 22 #端口号
#Protocol 2 #协议号
AuthorizedKeysFile .ssh/authorized_keys #存放连接过来的客户端的公钥
PasswordAuthentication yes #是否允许使用密码验证
UseDNS no #禁止解析DNS
#PermitRootLogin yes #允许root用户登录
PasswordAuthentication yes # 允许通过密码进行登录验证
[root@desktop0 ssh]# pwd
/etc/ssh
[root@desktop0 ssh]# cat ssh_config
# StrictHostKeyChecking ask #第一次连接远程服务器时,是否要验证(yes/no)选项
SSH代理
A -> C
A -> B
B不能连接C
实现A连接到B,B可以直接连接C
ssh-agent bash
ssh-add
ssh –A root@b
ssh-add –l
<