SSH知识点来自 SSH远程连接服务器 - 简书 (jianshu.com)
远程连接服务器通过文字或图形接口的方式来远程登录系统,让你在远程的终端前面登录Linux主机已取得可操作主机的接口(Shell),而登陆后的操作感觉上就像坐在系统前面一样。
简单理解为:
你想玩朋友V10王者账号,你首先让他扫码登录,登录成功后,你就可以获取他账号的操控权限,就可以给他掉星星等等。。。
用 SSH/Telnet/VNC 等方式取得的文字或者图形 Shell 能够进行很多系统管理的任务,与单纯的 FTP 能进行的工作当然不同。
其中SSH/Telnet/VNC等是用于远程连接的工具
FTP:
文件传输协议(File Transfer Protocol,FTP)是用于在网络上进行文件传输的一套标准协议,它工作在 OSI 模型的第七层, TCP 模型的第四层, 即应用层, 使用 TCP 传输而不是 UDP, 客户在和服务器建立连接前要经过一个“三次握手”的过程, 保证客户与服务器之间的连接是可靠的, 而且是面向连接, 为数据传输提供可靠保证
远程连接服务器的功能:
1、分享 Unix-Like 主机的运算能力;
2、服务器类型(Server),有限度的开放连接;
3、工作站类型(Workstation),只对内网开放;
文字接口和图形接口,明文传输和加密传输
文字接口明文传输:Telnet、RSH,目前已少用;
文字接口加密:SSH为主;
图形接口:XDMCP、VNC、XRDP等
这里作者不做详解,想看详细的过程点击下面这位作者的作品:
http://t.csdn.cn/WNzQ1
SSH协议目前存在SSH1.X(SSH2.0之前的版本)和SSH2.0版本。SSH2.0协议相比SSH1.X协议来说,在结构上做了扩展,可以支持更多的认证方法和密钥交换方法,同时提高了服务能力。SSH服务器和客户端通过协商确定最终使用的SSH版本号
版本协商记住一点即可:主动连接的一方可以向下兼容。高——>低 低 !——>高
服务器和客户端通过密钥交换算法,动态生成共享的会话密钥和会话ID,建立加密通道。会话密钥主要用于后续数据传输的加密,会话ID用于在认证过程中标识该SSH连接。
详细讲解请看这位作者:
http://t.csdn.cn/g625L
SSH(Secure Shell Protocol),它可以通过数据包加密技术将等待传输的数据包加密后在传输到网络上,因此数据信息就比较安全。
在默认状态下,SSH协议本身提供两个服务器功能。
一个是类似 Telnet 的远程连接使用 Shell 的服务器,即俗称的SSH;
另一个就是类似 FTP 服务的 Sftp-Server,提供更安全的 FTP 服务
2.1、连接加密技术
目前常见的数据包加密技术通常是所谓的 “非对称密钥系统” 来处理的。主要是通过两把不一样的公钥(Public)和私钥(Private)来进行加密与解密的过程。由于这两把钥匙的作用是提供数据加解密的,所以在同一个方向的连接中,这把钥匙当然是需要成对的。
公钥(Public Key):提供给远程主机进行数据加密行为,也就是说大家都能取得你的公钥来将数据加密;
私钥(Private Key):远程主机使用你的公钥加密的数据,在本地端就只能使用来进行解密。由于私钥很重要,因此私钥是不能够外流的,只能保护在自己的主机上。
由于每台主机都应该有自己的密钥(公钥与私钥),且公钥用来加密而私钥用来解密,其中私钥不可外流,但因为网络是双向的,所以,每个人应该都要有对方的“公钥”才对!
公钥和私钥
公钥私钥的产生
1、服务器建立公钥文件;2、客户端主动连接要求;
3、服务器传送公钥给客户端;
4、客户端记录/对比服务器的公钥数据及计算自己的公私钥;(客户端的密钥是随机运算产生于本次连接当中的,所以这次的连接与下次的连接密钥可能会不一样啦!此外客户端的用户主目录下:~/.ssh/know_hosts 中会记录曾经连接过的主机的 Public Key,用于确认·我们自己已经连接上正确的服务器。如果想要产生新的密钥则 rm /etc/ssh/ssh_host*
5、返回客户端的公钥数据到服务器;
6、服务器接受私钥开始双向加解密。
2.2、启动SSH服务
service sshd sta
SSHD可以同时提供Shell和FTP,而且都是架构在 Port 22 上面的
2.3、SSH客户端连接程序 —— Linux用户
2.3.1、SSH:直接登录远程主机的指令
如果不填写账号的话,那么会以本地端计算机的账号来尝试登陆远程。
ssh 192.168.1.1
ssh -f [email protected] shutdown -h now
2.3.2、服务器公钥记录文件:~/.ssh/known_hosts
当你登录远程服务器时,本机会主动接收到服务器的Public Key去比对 ~/.ssh/known_hosts有无相关公钥。
2.3.3、模拟FTP的文件传输方式:SFTP
SSH是登录远程服务器进行工作,那如果你只是想要从远程服务器下载或者上传文件呢?那就不使用SSH啦,而必须使用SFTP或SCP。这两个指令都是使用SSH的通道(port :22),只是模拟成FTP与复制的操作而已。
sftp [email protected]
SFTP用法
2.3.4、文件异地直接复制:SCP
通常使用SFTP是因为可能不知道服务器上面已存在的文件名信息,如果已经知道服务器上的文件名,那么最简单快捷的方式是使用SCP这个命令。
scp用法
scp /home/aaa/test.txt [email protected]:/home/zhang
scp [email protected]:/home/zhang/AAA.txt /home/aaa/
3、SSHD服务器详细配置
基本上,所有的SSHD服务器的详细配置都放置在 /etc/ssh/sshd_config 配置文件中。同时请注意,配置文件里只要未被修改的值即为默认值,你可以依据它来修改。建议取消root登录并将SSH版本设定为2.
vim /etc/ssh/sshd_config
将远程连接禁止root登录:
#PermitRootLogin yes 改为 PermitRootLogin no;
#Protocol 2
SSH限制被尝试次数:
MaxAuthTries 6;
在限定的次数里面密码认证失败的话将会被强制断开连接。
关闭UseDNS加速SSH登录:
经常登录SSH的朋友可以感觉出,每次登录SSH时总是要停顿一下才能连接上,这是因为OpenSSH服务器有一个DNS查找选项UseDNS在默认情况下是打开的;
UseDNS选项打开的状态下,当客户端试图登录SSH服务器时,服务器端先根据客户端的IP地址进行DNS PTR反向查询客户端主机名,然后根据查询出的客户端主机名进行DNS正向A记录查询,验证与其原始IP地址是否一致,这是防止客户端欺骗的一种措施,但一般我们的IP不会有PTR记录,打开这个选项不过是在白白浪费时间而已,不如将其关闭。
UseDNS no;
SSH限制IP登录几种方法:
1、修改 etc/hosts.allow 和 etc/hosts.deny 文件;
2、修改 /etc/ssh/sshd_config 文件,加入 Allowusers:用户名@IP(只允许某用户从哪个Ip登录)。
Allowusers *@192.168.1.111
PermissionRootLogin no
#这两者可以保证只能从你允许的IP登录你的服务器;
4、制作不用密码可立即登录的SSH用户
利用Key不输入密码远程连接主机,具体流程
1、客户端建立两把钥匙:利用命令为 ssh-keygen;
2、客户端放置好私钥文件:将 Private Key 放在用户主目录内的 .ssh/ 里面即可,“.ssh”文件夹权限为700,私钥权限为600且属于用户自己,否则在未来密钥对比的过程中将出现问题。
3、将公钥放置到服务器端中:将 Public Key 放置在你想要用来登录的那个用户的主目录内的 .ssh/authorized_keys文件里,也可以用追加的方式写入。
ssh-keygen [ -t rsa | dsa ],之后会生成公钥和私钥;
生成的公私钥
将公钥上传到需要远程连接的服务器上:
scp ~/.ssh/id_rsa.pub [email protected]:~;
cat id_rsa.pub >> .ssh/authorized_keys;将公钥写入
.ssh 目录的权限是700,authorized_keys权限是644
步骤关键:
Client必须制作出Public和Private这两把Key,且Private Key需要放到 ~/.ssh/ 内;
Server必须要有Public Key,且放置到用户主目录下的 ~/.ssh/authorized_keys,同时目录的权限(.ssh)必须是700而文件权限必须是644,同时文件的属主和属组都必须与该账号吻合才行。
当你还想要登录其他远程主机时,只要将你的Public Key(id_rsa.pub)文件copy到其他主机上去,并且将内容添加到 ~/.ssh/authorized_keys中即可。
5、简易安全设置
SSHD 所谓的安全其实指的是SSHD的数据是加密过的,所以它的数据在Internet上面传递时是比较安全的。至于SSHD这个服务本身就不是那样安全了。所以如果要将SSHD对Internet开放可登录的权限的话,那么,就尽量局限在几个小范围内的IP或主机名(如你们公司的出口IP),这很重要。
1、服务器软件本身的设置强化:/etc/ssh/sshd_config,禁止root登录,禁止某个用户登录,禁止某个用户组登录;
2、/etc/hosts.allow 和 /etc/hosts.deny
hosts.allow--->sshd :127.0.0.1 192.168.0.0/255.255.0.0
hosts.deny--->sshd:ALL
3、iptables数据包过滤防火墙
6.1、在非标准端口启动SSH(默认端口:22)
vi /etc/ssh/sshd_config
# Port 22(这是默认信息)----> Port 23(修改为23端口,但一定要注意,不要将端口开在某些周知的端口上,如80那些)
或者两端口共存,即sshd监听这两个端口:
Port 22
Port 23
非标准端口连接:
ssh -p 23 [email protected]
6.2、以 rsync 进行同步镜像备份
rsync 是一个相当棒的异地备份系统的指令,可以达到类似镜像(mirror)的功能
rsync 第一次备份的时候需要花费比较长的时间,因为首次要备份所有的文件。但是再次备份文件的时候,仅会复制有差异的数据。这个很重要的哈!
因为 rsync 是通过 SSH 来传输数据的,所以你可以针对 某个用户制作出免密码登录的SSH密钥!如此一来,往后异地备份系统就能够自动地以 crontab 来进行备份了。
rsync 的三种传输方式:
1、在本机上直接运行,用法几乎与 cp 一模一样,例如:
rsync -av /etc /tmp 将/etc/ 的数据备份到 /tmp/etc 内
2、通过 rsh 或 ssh 的信道在Server / Client 之间进行传输数据,例如:
rsync -avz user@ip:/test /test #先做无秘钥就可直接使用了
#rsync -av -e ssh user@ip:/etc /tmp 将远程Server的/etc 数据备份到本地 /tmp/etc
3、直接通过 rsync 提供的服务(daemon)来传输,此时 rsync 主机需要启动 873 Port
你必须要在Server端启动 rsync,看 /etc/xinetd.d/rsync;
你必须编辑 /etc/rsyncd.conf 配置文件;
你必须设置定义Client端连接的密码数据;
在 Client端可以利用: rsync -av user@hostname::/dir/path /local/path 注意是两个冒号
rsync使用方法
rsync命令举例
6.3、通过SSH通道加密原本无加密的服务
透过本地端的 ssh 加密联机到远程的服务器示意图
远程连接服务器可以让用户在任何一台计算机登录主机,以便使用主机的资源来管理与维护主机;
Telnet与RSH都是以明文方式传输数据,当数据在Internet上面传输时较不安全;
SSH由于使用密钥系统,因此数据在Internet上传输时时加密过的,所以比较安全;
但SSH还是属于比较危险的服务,请不要对整个Internet开放SSH的可登录权限,可利用iptables 规范可登录的范围;
SSH的Public Key 放在服务器端,而Private Key 放在Client端;
使用SSH时,尽量使用类似E-mail的方式来登录,即:ssh username@hostname;
Client端可以比对Server传来的Public Key的一致性,利用的文件为 ~user/.ssh/known_hosts;
SSH的Client端软件提供SSH、SCP、SFTP等程序;
制作不需要密码的SSH账号时,可利用ssh-keygen -t rsa 来生成Public Key和Private Key;
上述指令所生成的Public Key必须要上传到Server的 ~user/.ssh/authorized_keys;
rsync 可通过SSH 的服通道或 rsync --daemon 的方式来连接传输,其主要功能可以通过类似镜像备份来仅备份新的数据,因此传输数据相当快。
上述文章是转载自
SSH远程连接服务器 - 简书 (jianshu.com)https://www.jianshu.com/p/0d19bd29e1e1
ssh-keygen
scp /root/.ssh/suthorized_keys
root@ServerAddres:/root/.ssh/authorized_keys
ssh 服务端地址
[root@web ~]# ssh 192.168.59.134
[root@client ~]#
客户端:使用Xshell工具的用户密钥管理生成公钥和私钥
将公钥传输置要登录的服务端的家目录的.ssh下,并重命名为 authorized_keys
配置ssh文件
vim /etc/ssh/sshd_config
最后保存退出
:wq!
重启服务
systemctl restart sshd
如此远程配置变完成了!