SSH是远程连接linux系统的一种服务协议,常用于加密传输数据,因此相对于telnet这种在internet上进行明文传输数据要安全的多。
数据加密就是将看的懂的电子数据,经过一些运算,让这些数据变成没意义的信息,然后再在网络上传输,而当用户要想查看这些数据的时候在经过反向运算还原出原始数据。数据加密通常是通过一对公钥与私钥组合成的密钥对进行加密与解密操作的。即主机端吧数据传给客户端会先通过公钥加密后在传到网上去,而到达客户端的时候在经过私钥将加密的数据解开了,因此数据相对安全。
SSH两种版本的联机模式:
1、SSH protocol version 1
每台SSH服务器主机都可以使用RAS加密方式来产生一个1024字节的RSA Key,这个RAS的加密的方式步骤如下:
1>、当ssh服务启动的时候会产生一个768-bit的公钥(server key)存放在server中
2>、若有客户端的ssh机器联机过来,server就会将这个公钥传给客户端并判断此公钥的正确性。
3>、客户端接收到768-bit的公钥之后会随机产生一个256-bit的私钥(host key),并以加密的方式将公钥和私钥整合到一起形成一个完成的Key pair并传回给Server。之后Server与Client端在这次联机中记忆这一对1024-bit的Key pair来进行数据的传输。
这是Server与Client联机过程中的原理。
2、SSH protocol version 2
上述传输原理中存在着不安全的因素,就是当Server端接收到Client端的私钥之后就不会对本次连接进行Key pair的校验,此时要是有不发分子针对该次连接传送恶意代码,而服务端又不进行连接校验,就容易造成主机被黑掉,因此SSH protocol version 2很好的解决了这个问题,即增加了一个确认联机正确的Diffie-Hellman机制来查看在每次的联机过程中 检查来源是否正确以避免服务端被黑掉。
启动SSH服务
启动SSH服务非常的简单,在现在大多数的linux版本中都是默认启动了SSH服务的。启动的方式:server sshd restart 或 /etc/init.d/sshd sshd。后一种是最原始的启动方式。
SSH客户端联机:
客户端要联机SSH服务器很简单,使用ssh命令即可。
1、直接登录对方的主机:
[root@centos ~]#ssh 用户@主机名
或
[root@centos ~]#ssh 对方的IP
2、不登录对方主机直接在对方主机上执行命令:
[root@centos ~]#ssh 用户@主机名 命令
或
[root@centos ~]#ssh 对方的IP 命令
SSH SFTP功能:
Sftp的使用功能与SSH基本上相同。
[root@centos ~]#ssh 用户@主机名
或
[root@centos ~]#ssh 对方的IP
进入到sftp后和一般的FTP的功能没什么两样了,下面是一些基本的命令:
ls,dir 列出当前的目录下的文件名
mkdir,rmdir 建立和删除空目录
pwd,rm 显示当前所在的目录和删除文件、目录
rename,exit,quit 更改文件或目录和退出
chgrp,chown,chmod 与文件和目录权限相关的操作命令
put,get 上传和下载文件或目录
lls,lmkdir,lpwd 针对本机的:列出本机所在目录下的文件名、建立目录和显示本机目录。
SSH SCP功能:
SCP是基于SSH的安全远端拷贝与文件的工具,相对于ftp而言比较简单。
SCP命令语法:
1、将本地文件拷贝到远端主机
scp 文件 用户@主机名:远端目录
2、将远端目录拷贝到本地
scp –r 用户@主机名:远端目录 本地目录
Windows客户端联机Linux工具:
在linux系统下要想连接SSH服务器,可直接使用ssh命令就可以了。Windows环境下要想连接SSH服务器必须通过第三方软件才能实现。目前市面上比较常用的用:putty和SSHSecureShellClient等等,putty方便快捷有效,而SSHSecureShellClient则能提供windows与linux之间文件共享的功能也是不错的。
以putty为例:
在hostname位置输入要登录的主机名称,选择端口22(默认),点击open,输入正确的用户名和密码即可登录。
点击open并输入正确的用户名和密码即可登录。
其实在windows环境先联机linux系统的软件还有好多,就不多介绍了。
SSH服务器配置文件解析
所有的SSH相关的设置文件都在/etc/ssh这个文件夹中,其中sshd_config则是主配置文件。
下面是sshd_config主配置文件的主要参数设置以及功能:
Port 22
SSH 预设使用 22 这个 port,您也可以同事使用多个端口
Protocol 2,1
选择的 SSH 协议版本,一般使用2版本,如果要同时使用1和2这两个版本则用逗号将其隔开。
ListenAddress 0.0.0.0
监听的主机适配卡举个例子来说如果您IP,分别是192.168.0.10和192.168.2.20,那么只想要开放 192.168.0.100 时,就可以写如同下面的样式:
ListenAddress 192.168.0.100只监听来自192.168.0.100 这个IP 的SSH联机,如果不使用设定的话,则预设所有接口均接受SSH
PidFile /var/run/sshd.pid
可以放置 SSHD 这个 PID 的档案!左列为默认值
LoginGraceTime 600
当使用者连接SSH服务器的时候,在指定的时间内要是没连接上SSH服务器,则会断开
Compression yes
是否可以使用压缩命令,默认是可以的
HostKey /etc/ssh/ssh_host_key
SSH version 1 使用的私钥HostKey /etc/ssh/ssh_host_rsa_key
SSH version 2 使用的 RSA 私钥
HostKey /etc/ssh/ssh_host_dsa_key
SSH version 2 使用的 DSA 私钥
KeyRegenerationInterval 3600
由前面联机的说明可以知道, version 1 会使用 server 的 Public Key ,那么如果这个 Public Key 被偷的话,岂不完蛋?所以需要每隔一段时间来重新建立一次!这里的时间为秒!
ServerKeyBits 768
这个是 Server key 的长度
SyslogFacility AUTH
当有人使用 SSH 登入系统的时候,SSH会记录资讯,
LogLevel INFO
登录记录的等级
PermitRootLogin no
是否允许 root 登入,预设是允许的,但是建议设定成 no
UserLogin no
在 SSH 底下本来就不接受 login 这个程序的登入
StrictModes yes
当使用者的 host key 改变之后,Server 就不接受联机,可以抵挡部分的木马程序RSAAuthentication yes
是否使用纯的 RSA 认证!?仅针对 version 1
PubkeyAuthentication yes
是否允许 Public Key ?当然允许啦!只有 version 2AuthorizedKeysFile .ssh/authorized_keys
上面这个在设定若要使用不需要密码登入的账号时,那么那个 账号的存放档案所在档名!RhostsAuthentication no
本机系统不止使用 .rhosts ,因为仅使用 .rhosts 太不安全了,所以这里一定要设定为 no !
IgnoreRhosts yes
是否取消使用 ~/.ssh/.rhosts 来做为认证!当然是!
RhostsRSAAuthentication no
这个选项是专门给 version 1 用的,使用 rhosts 档案在/etc/hosts.equiv配合 RSA 演算方式来进行认证!不要使用
HostbasedAuthentication no
这个项目与上面的项目类似,不过是给 version 2 使用的!
IgnoreUserKnownHosts no
是否忽略家目录内的 ~/.ssh/known_hosts 这个档案所记录的主机内容?当然不要忽略,所以这里就是 no 啦!PasswordAuthentication yes
密码验证当然是需要的!所以这里写 yes 啰!PermitEmptyPasswords no
若上面那一项如果设定为 yes 的话,这一项就最好设定为 no ,这个项目在是否允许以空的密码登入!当然不许!ChallengeResponseAuthentication yes
挑战任何的密码认证!所以,任何 login.conf 规定的认证方式,均可适用!PAMAuthenticationViaKbdInt yes
是否启用其它的 PAM 模块!启用这个模块将会导致 PasswordAuthentication 设定失效
以下四行是有关Kerberos有关的参数设定!因为我们没有 Kerberos 主机,所以底下不用设定!
KerberosAuthentication noKerberosOrLocalPasswd yesKerberosTicketCleanup yesKerberosTgtPassing noX11Forwarding yesX11DisplayOffset 10X11UseLocalhost yesPrintMotd no
登入后是否显示出一些信息呢?例如上次登入的时间、地点等,预设是 yes ,但是,如果为了安全,可以考虑改为 no
PrintLastLog yes
显示上次登入的信息!可以啊!预设也是 yes !
KeepAlive yes
一般而言,如果设定这项目的话,那么 SSH Server 会传送 KeepAlive 的讯息给 Client 端,以确保两者的联机正常,这个情况下,任何一端死掉后,SSH 可以立刻知道!而不会有僵尸程序的发生!
UsePrivilegeSeparation yes
使用者的权限设定项目!就设定为 yes 吧!
MaxStartups 10
同时允许几个尚未登入的联机画面?当我们连上 SSH ,但是尚未输入密码时,这个时候就是我们所谓的联机画面啦!在这个联机画面中,为了保护主机,所以需要设定最大值, 预设最多十个联机画面,而已经建立联机的不计算在这十个当中
DenyUsers *
拒绝某些用户使用SSH服务器,直接在后面加上用户名称即可
DenyDroups
阻止某些群组用户使用SSH,后面加上组名称即可
关于 SFTP 服务的设定项目
Subsystem sftp /usr/lib/ssh/sftp-server
设置不用输密码可立即登录的SSH用户
前面知道了SSH服务器与客户端之间的传输原理,那么我们就可以吧Client产生的私钥复制到Server中去,然后Client端登录Server的时候,由于两者之间在SSh要联机的信号传递中就已经比对的公钥和私钥,因此可以直接进行数据的传输,而不需要输入密码。具体的操作步骤:
1、现在Client端建立公钥和私钥,利用的命令是ssh-keygen。
2、将私钥放在Client端的默认目录下,也就是$HOME/.ssh/,并修改权限为user可读的状态。
3、把公钥放在任何一个你想要用来登录的主机Server中的user的默认目录内的.ssh/里的认证文件,即可完成这个程序。
举例说明:
Server部分为(192.168.1.1)的主机,使用的是root这个账号。
Client部分为192.168.1.254的主机,使用的是root这个账号。
现在要测试along这个账号不用输入密码就可以登录root这台主机。
步骤:
1、Client的设置:
1>、创建公钥和私钥
在root用户下输入ssh-keygen –t rsa命令,一路回车即可。
-t 指的是使用任何密码生成方式,这里使用的是rsa。
生成的公钥id_rsa.pub和私钥id_rsa均在~/.ssh/目录下,这个目录是隐藏的,如下图所示:
2>、所生成的私钥和公钥,一般所创建的私钥和公钥都是在用户的家目录下
3>、在~/.ssh下创建文件夹config,并写入要登录的服务器的信息
注意:如果要是对远程的多台服务器进行设置的话,可以以同样的设置添加别的服务器的信息。
4>、将私钥拷贝到远端SSH服务器上去
2、Server的设置
1>、在客户端上把公钥拷贝到~/.ssh/authorized_keys中去,并更名为authorized_keys.
2>、重启ssh服务器并测试
测试成功:
领取专属 10元无门槛券
私享最新 技术干货