linux_ssh
一、什么是ssh
简单说ssh是一种网络协议,用于计算机之间的加密登录.如果一个用户从本地计算机,使用ssh协议登录另一个远程计算机,这种登录是安全的,即使中途被截获密码也不会泄漏.
二、基本用法
- ssh远程登录
$ ssh user@host
- 本地用户名与远程用户名一致,登录时可以省略用户名
$ ssh host
- ssh默认端口是22,也就是说,你登录的请求会送进远程主机的22端口,使用p参数,可以修改这个端口
$ ssh host -p 2222 user@host
三、中间人攻击
ssh之所以能够保证安全,原因在于它采用了公钥加密.流程为:
- 远程主机收到用户登录的请求,把自己的公钥发给用户.
- 用户使用这个公钥,将登录密码加密后,发送回来.
- 远程主机用自己的私钥,解密登录密码,如果密码正确,就同意用户登录.
四、公钥登录
原理:用户将自己的公钥存储在远程主机上.登录的时候,远程主机会向用户发送一段随机字符串,用自己的私钥加密后,在发回来.远程主机用事先储存的公钥进行解密,如果成功,就证明用户是可信的,直接允许登录shell,不在要求密码.
如果没有现成的key,可以直接用ssh-keygen生成一个
ssh-keygen
之后可以一路回车.有一个问题是,要不要对私钥设置口令(passphrase),如果担心私钥的安全,这里可以设置一个.运行以后,会在$HOME/.ssh/目录下,会新生成两个文件:id_rsa.pub和id_rsa.前者是你的公钥,后者是你的私钥ssh-copy-id user@host
将公钥传送到远程主机host上面.- authorized_keys文件,远程主机将用户的公钥保存在登录后的用户主目录的
$HOME/.ssh/authorized_keys
文件中,公钥就是一段字符串,只要把它追加在authorized_keys文件的末尾就行了.这里不使用ssh-copy-id
命令,使用:$ ssh user@host 'mkdir -p .ssh && cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub
.这条语句由多个语句组成,依次分解开来看:-
$ ssh user@host
表示远程登录主机 -
单引号中的
mkdir .ssh && cat >> .ssh/authorized_keys
,表示登录后在远程shell上执行的命令 -
$ mkdir -p .ssh
的作用是,如果用户主目录中的.ssh 目录不存在,就创建一个 -
'cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub
的作用是,将本地的公钥文件~/.ssh/id_rsa.pub,重定向追加到远程文件authorized_keys的末尾- 如果还是不能免密码登录,打开远程主机的/etc/ssh/sshd_config这个文件,检查下面几行,把注释去掉
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
-
重启远程主机的ssh服务
service ssh restart(ubuntu)
或/etc/init.d/ssh restart(debian)
-
五、.ssh/config配置
配置config,可以使用该方法连接远程服务器 ssh api3
- 配置示例:
Host api3 hostname 120.26.81.70 user zongzhen