SSH与SCP简介
SSH简介
SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定;SSH 为建立在应用层基础上的安全协议。SSH 是较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。
传统的网络服务程序,如FTP、POP、telnet在本质上是不安全的,因为它们在网络上用明文传送口令和数据,别有用心的人非常容易就可以截获这些口令和数据。并且这些程序的安全验证方式也有弱点,很容易遭受中间人攻击,使用SSH,会将所有传输的数据进行加密,不仅可以防止中间人攻击,还可以防止DNS欺骗、IP欺骗,传输的数据都是经过压缩的,这样可以加快传输速度,SSH可以为FTP、POP提供一个”安全通道”
SSH目前拥有两个版本:SSHv1和SSHv2,其中SSHv2更加安全,首选SSHv2。想要使用SSH协议来远程管理linux系统,需要部署sshd服务程序,sshd是基于SSH协议开发的一款远程管理服务程序。
SCP简介
SCP(secure copy)命令用于在linux系统之间进行远程复制文件和目录。scp跨服务器传输是加密的(通过ssh进行加密)。openssh工具包中含有的工具。当你服务器硬盘变为只读(read only system)时,scp可以将文件移出来。Scp并不占太多资源,不会给系统造成负荷。
SSH安装与命令
SSH位于openssh工具套件(包含sftp、scp等工具)中,所以我们只需要安装openssh。安装完后,会自启动sshd服务
安装openssh
apt-get install openssh-server
查看sshd服务
service sshd status
SSH命令格式
远程挂载目录:将server上的目录挂载到client上,在client上该目录下的操作等同于server上进行操作
sshfs username@server_ip:filepath localpath
username:服务器用户名
server_ip:服务器IP地址
filepath:服务器目录路径
localpath:本地路径
SCP命令格式
scp [参数] [原路径] [目标路径]
-4:强制scp使用IPV4寻址
-r:传输目录
-P:指定server的sshd监听的端口号
-v:显示详细的连接速度
我经常使用SCP来传输server和client之间的文件或目录:
- 从服务器下载文件到本地
scp username@serverip:/server_filepath /local_filepath
- 从本地上传文件到服务器
scp /local_filepath username@serverip:/server_filepath
sshd服务主配置文件
sshd服务的主配置文件位于/etc/ssh/sshd_config
可修改内容如下:
#Port 22 sshd服务侦听端口,默认22
#ListenAddress 0.0.0.0 设定sshd服务监听的IP地址(只允许该IP使用SSH登录)
#HostKey /etc/ssh/ssh_host_rsa_key SSH协议第二版本时,RSA私钥存放的路径
#HostKey /etc/ssh/ssh_host_ecdsa_key ECDSA私钥认证
#HostKey /etc/ssh/ssh_host_ed25519_key ED25519私钥认证
# 登录
#SyslogFacility AUTH 当用户SSH上系统时,记录信息
#LogLevel INFO
# 认证
#LoginGraceTime 2m 自动断开连接时间:2分钟不输入密码,自动断开
PermitRootLogin yes 允许root用户登录:一般no,出于安全考虑
#StrictModes yes 严格模式:当remote_user的私钥更改时直接拒绝连接
#MaxAuthTries 6 最大密码尝试次数
#MaxSessions 10 最大连接终端数
PubkeyAuthentication yes 密钥方式认证
#AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2 authorized_keys文件的路径
ChallengeResponseAuthentication no
# Kerberos选项
#KerberosAuthentication no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes
#KerberosGetAFSToken no
# GSSAPI 选项
#GSSAPIAuthentication no
#GSSAPICleanupCredentials yes
#GSSAPIStrictAcceptorCheck yes
#GSSAPIKeyExchange no
#Banner none 指定banner信息路径:去掉none,填banner文件路径
UseDNS no
AddressFamily inet
SyslogFacility AUTHPRIV
PasswordAuthentication no 密码登录:如果采用了密钥登陆,那么这里填no
值得注意的是,每次修改完/etc/sshd/sshd_config都需要重启sshd服务
service sshd restart
SSH登录方式
SSH提供两种级别的安全验证:基于密码的安全验证、基于密钥的安全验证
基于密码的安全验证
设置账号、密码就可以登陆远程主机,传输的数据会被加密,但是不能保证你正在连接的服务器就是你想连接的服务器,可能有假冒的服务器,容易遭受中间人攻击。并且密码可能会被暴力破解(后面提到的SSH防爆破可用于基于密码的安全验证)
远程密码登录:
ssh username@server_ip
基于密钥的安全验证
为了保护SSH服务端口(即端口号22)被暴力破解,依靠密钥,自己创建密钥对(包含公钥和私钥),并把公钥密匙放在需要访问的服务器上,如果想要连接服务器,客户端会像服务器发出请求,请求用你的密钥进行安全验证,服务器收到请求后,先在服务器的主目录下寻找公钥,然后把它和你发送过来的公钥进行比较,如果两个密钥一致,服务器就用公钥加密“challenge”并发送给客户端,客户端收到challenge后,用私钥解密,再发送给服务器。这样避免了中间人攻击,因为他没有私钥!
密钥形式登陆原理:利用密钥生成器制作一对密钥(包含公钥和私钥),将公钥上传至服务器的某个账户上,然后再客户端利用私钥即可完成认证并登陆。这样一来,没有私钥,任何人都无法通过SSH暴力破解你的密码来远程登陆系统,此外将公钥复制到其他账户甚至主机上,利用私钥也可以登录
密钥生成:
ssh-kengen [参数]
-t:加密类型,如RSA、DES
-b:密钥长度,如4096位
基于密钥登录演示:
- 制作密钥对
ssh-keygen
Generating public/private rsa key pair. //创建公私RSA密钥对
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. //公钥位置
Tips:密钥锁码是在使用私钥时必须输入,这样可以保护私钥不被盗用,也可以留空,实现无密码登录。现在在/root/.ssh/目录中有两个密钥文件,id_rsa为私钥、id_rsa.pub为公钥
- 公钥放至服务器
#安装公钥
cd .ssh
cat id_rsa.pub >> authorized_keys
安全性考虑:考虑到密钥文件权限的安全性,authorized_keys(即公钥文件)权限600(即只允许root用户rw权限)、.ssh目录权限700
- 私钥放至客户端
scp root@149.129.37.30:/root/.ssh/id_rsa /home/yuge/id_rsa
#将id_rsa放入客户端的.ssh目录中
#ssh root@server_ip
- 修改sshd_config,允许密钥认证登录
#编辑/etc/ssh/sshd_config文件
PubkeyAuthentication yes //允许密钥认证
PasswordAuthentication no //禁用密码登录
- 重启sshd服务
service sshd restart
文章中如有错别字或者错误之处,请评论指出,谢谢!