SSH使用指南
SSH使用指南
SSH使用指南
目录
- 简介
- 历史
- 入门
- 进阶
- 原理
- 参考
简介
SSH(Secure Shell)是一种用于在不安全网络中进行操作网络服务的加密网络协议,提供两台电脑不安全网络间进行认证和加密数据传输。主要用于网络管理员进行远程管理使用,允许用户远程登录、远程执行命令和拷贝文件。
历史
Version 1.x
1995, 芬兰赫尔辛基科技大学的一个研究员Tatu Ylönen设计了第一版的协议(称为SSH-1),并发布了一版免费的软件。
- 启发:校园网络受到密码嗅探攻击。
- 目的:代替早期没有提供强认证和保密性的rlogin,Telnet,ftp和rsh协议。
1995的12月,Ylönen成立了一家公司SSH Communications Security来推广和开发SSH,并将后续的版本转为商业软件。
Version 2.x
SSH-2修订版在2006年确认为标准,在安全和特性上都胜过SSH-1,并和SSH-1不兼容。
Version 1.99
一个区分向下兼容的命名方法,指支持2.0和之前版本的一个协议版本。
OpenSSH和OSSH
1999年Björn Grönvall基于原始的SSH v1.2.12开源版本开发了OSSH,不久OpenBSD分叉了OSSH并创建了OpenSSH,此后OpenSSH继续维护广为移植,OSSH被淘汰。
OpenSSH 7.6版本移除了对SSH-1的支持。
入门
SSH可以在多平台下有多种应用场景,包括大部分的Unix变种(GNU/Linux,BSD包括MacOS,Solaris)和Windows。
使用场景:
- 远程登录
- 远程执行单个命令
- 配置无密码登录远程机器
- 配合rsync备份、拷贝和镜像文件
- 端口转发或者端口隧道化
- 实现一个成熟的VPN
- 远程主机转发X window
- 从支持Socks协议的SSH客户端进行安全的代理网页浏览
- 使用SSHFS挂载远程主机的目录到本地主机文件系统
- 自动化远程监控和管理服务器
- 支持ssh的移动端或者嵌入式的开发
客户端
Unix和Linux系统中基本都包含ssh
命令,这个命令启动SSH客户端用以在远程机器和SSH服务端建立安全的连接,通常使用的是OpenSSH SSH Client。
登录
ssh -p port_number remote_username@remote_host
-p port_number
指定端口号,如果是默认22端口,可省略remote_username
为登录用户名remote_host
: 主机名,可以是域名或者IP
如果是首次连接该远程机器,则会出现以下的提示信息:
The authenticity of host 'example.com' cannot be established.
DSA key fingerprint is 04:48:30:31:b0:f3:5a:9b:01:9d:b3:a7:38:e2:b1:0c.
Are you sure you want to continue connecting (yes/no)?
选择yes
继续后,将会添加这个服务器到你的已知主机列表中~/.ssh/known_hosts
:
Warning: Permanently added 'example.com' (DSA) to the list of known hosts.
每台服务器都有一个key,上述的问题来确认和保存主机key,在下一次连接服务器时,会确认是否为同一台服务器。连接建立后,用户即认证成功。正常情况下,命令会要求用户输入密码。
退出
使用exit
命令退出远程会话
exit
执行远程命令
ssh也可以用于不登录服务器直接远程执行命令
ssh host command
ssh host ls /opt
X11转发
ssh -X remote_host
服务端
启动ssh服务,服务端ssh的配置在进阶中讲解
sudo service ssh start
# 使用systemd的命令
sudo systemctl start ssh
进阶
使用SSH key登录
通过登录ssh时会使用每次输入密码的方式,不过使用SSH的key更方便和安全,配置key稍微麻烦一点,后续就是一劳永逸的事情,直接一条命令或者一个别名直接登录。
创建SSH Key
在你的客户端电脑创建ssh key:
ssh-keygen -t rsa
按回车确认,你的key会被创建在~/.ssh/id_rsa.pub和~/.ssh/id_rsa
。
切换到.ssh
目录:
cd ~/.ssh
查看各文件的权限:
ls -l
输出结果如下:
-rw-r--r-- 1 demo demo 807 Sep 9 22:15 authorized_keys
-rw------- 1 demo demo 1679 Sep 9 23:13 id_rsa
-rw-r--r-- 1 demo demo 396 Sep 9 23:13 id_rsa.pub
id_rsa
是仅文件拥有者可读,需要保持私密;id_rsa_pub
可以被共享和读取。
传送公有Key到服务器
拷贝公有Key到服务器:
ssh-copy-id remote_host
这个命令会开启一个ssh会话,需要输入密码进行认证;输入密码成功后,将会拷贝公有Key到服务器的认证Key文件中,后续将允许不输入密码登录。
服务端SSH配置
服务端ssh配置是指配置sshd服务,默认情况,配置文件位于/etc/ssh/sshd_config
。
备份当前配置文件
sudo cp /etc/ssh/sshd_config{,.bak}
使用编辑器打开文件
sudo vi /etc/ssh/sshd_config
修改部分配置项
# 修改端口号,默认为22,修改后客户端连接需要指定这里设置的端口
Port 22
# 设置主机的keys
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
# 设置日志级别,排错时可增加日志级别,分别为QUIET, FATAL, ERROR, INFO, VERBOSE, DEBUG, DEBUG1, DEBUG2, and DEBUG3
SyslogFacility AUTH
LogLevel INFO
# 设置没有登录成功时的连接等待时间
LoginGraceTime 120
# 设置是否允许root用户登录,大多数普通用户能通过sudo提高权限并支持登录的话,该项应该设为yes
PermitRootLogin yes
# 设置安全防范,配置文件不安全时禁止登录
StrictModes yes
# 设置x窗口的转发
X11Forwarding yes
X11DisplayOffset 10
重启服务
上述设置保存后,需要重启服务才能生效
sudo service ssh restart
# 或
sudo systemctl restart ssh
检查配置修改是否有效,在修改配置的时候尽量保证有个用户已经登录连接,帮助设置有误时进行修改。
关闭密码认证
如果你可以安装了ssh key,并且可以通过key免密登录,否则关闭密码认证后将无法登录远程服务器。
使用管理员权限打开配置文件
sudo vi /etc/ssh/sshd_config
修改配置文件,关闭密码认证
PasswordAuthentication no
有两个配置需要确认设置正确
PubkeyAuthentication yes
ChallengeResponseAuthentication no
重启服务
sudo service ssh restart
# 或
sudo systemctl restart ssh
此时,密码认证将不可用,你的服务器将只能通过ssh key进行登录。
原理
基本原理
SSH的工作时通过客户端程序连接到ssh服务器。
基于Key的认证工作原理
基于Key认证的方式,需要一对Key,一个私有Key和一个公有Key。 私有Key保存在客户端电脑,并且要是安全和私密的。 公有Key放置在任何你想访问的服务器上。
当你通过键对访问时,服务器会使用公有Key创建一个消息给客户端,并且只有通过私有Key才能读取;接着,客户端发送合适的响应给服务端并认证。