前言
ssh 相当于 windows 上的远程桌面连接,但没有桌面,只有文字终端。ssh 是许多 Linux 使用者入门时必学的一个命令。借助 ssh,开发人员可以很方便地连接远程或是局域网的其他电脑,直接在上面进行开发工作。
拿我自己平时工作流举例,每天到实验室首先打开 mac 上的 item2 终端,连接两个扩展屏,再 ssh 连入几台服务器,切换到 tmux,大部分工作都可以在一个终端上完成。
可以说,使用好 ssh,我们能更舒心地连接远程;使用好终端,开发人员能够更顺利地完成自己的开发工作,我整理的一些关于 Linux 学习的书籍和笔记都放在这里了,想白嫖的兄弟直接点击领取即可。
工作机制
加密技术
防止入侵
功能盘点
常见参数
服务相关
免密设置
问题排查
批量分发与管理方案
文件配置
SSH(远程连接工具)连接原理:ssh 服务是一个守护进程(demon),系统后台监听客户端的连接,ssh 服务端的进程名为 sshd,负责实时监听客户端的请求(IP 22 端口),包括公共秘钥等交换等信息。
ssh 服务端由 2 部分组成: openssh(提供 ssh 服务) openssl(提供加密的程序)
ssh 的客户端可以用 XSHELL,Securecrt, Mobaxterm 等工具进行连接
SSH 的工作机制
服务器启动的时候自己产生一个密钥(768bit 公钥),本地的 ssh 客户端发送连接请求到 ssh 服务器,服务器检查连接点客户端发送的数据和 IP 地址,确认合法后发送密钥(768bits)给客户端,此时客户端将本地私钥(256bit)和服务器的公钥(768bit)结合成密钥对 key(1024bit),发回给服务器端,建立连接通过 key-pair 数据传输。
1.远程 Server 收到 Client 端用户 TopGun 的登录请求,Server 把自己的公钥发给用户。
2.Client 使用这个公钥,将密码进行加密。
3.Client 将加密的密码发送给 Server 端。
4.远程 Server 用自己的私钥,解密登录密码,然后验证其合法性。
5.若验证结果,给 Client 相应的响应
Client 端如何保证接受到的公钥就是目标 Server 端的?
1.Client 将自己的公钥存放在 Server 上,追加在文件 authorized_keys 中。
2.Server 端接收到 Client 的连接请求后,会在 authorized_keys 中匹配到 Client 的公钥 pubKey,并生成随机数 R,用 Client 的公钥对该随机数进行加密得到 pubKey(R),然后将加密后信息发送给 Client。
3.Client 端通过私钥进行解密得到随机数 R,然后对随机数 R 和本次会话的 SessionKey 利用 MD5 生成摘要 Digest1,发送给 Server 端。
4.Server 端会也会对 R 和 SessionKey 利用同样摘要算法生成 Digest2。
5.Server 端会最后比较 Digest1 和 Digest2 是否相同,完成认证过程。
更多学习...
SSH 的加密技术
加密技术:传输过程,数据加密。1.SSH1 没有对客户端的秘钥进行校验,很容易被植入恶意代码 2.SSH2 增加了一个确认联机正确性的 Diffe_Hellman 机制,每次数据的传输,Server 都会检查数据来源的正确性,避免黑客入侵。SSH2 支持 RSA 和 DSA 密钥 DSA:digital signature Algorithm 数字签名 RSA:既可以数字签名又可以加密
SSH 知识小结
1.SSH 是安全的加密协议,用于远程连接 Linux 服务器 2.SSH 的默认端口是 22,安全协议版本是 SSH23.SSH 服务器端主要包含 2 个服务功能 SSH 连接和 SFTP 服务器 4.SSH 客户端包含 ssh 连接命令和远程拷贝 scp 命令等
如何防止 SSH 登录入侵
1.密钥登录,更改端口 2.牤牛阵法 3.监听本地内网 IP(ListenAddress 192.168.25.*)
SSH 功能大全
1.登录
ssh -p22 omd@192.168.25.137
2.直接执行命令 -->最好全路径
ssh root@192.168.25.137 ls -ltr /backup/data
==>ssh root@192.168.25.137 /bin/ls -ltr /backup/data
3.查看已知主机
cat /root/.ssh/known_hosts
4.ssh远程执行sudo命令
ssh -t omd@192.168.25.137 sudo rsync hosts /etc/
5.scp
1.功能 -->远程文件的安全(加密)拷贝
scp -P22 -r -p /home/omd/h.txt omd@192.168.25.137:/home/omd/
2.scp知识小结
scp是加密远程拷贝,cp为本地拷贝
可以推送过去,也可以拉过来
每次都是全量拷贝(效率不高,适合第一次),增量拷贝用rsync
6.ssh自带的sftp功能
1.Window和Linux的传输工具
wincp filezip
sftp -->基于ssh的安全加密传输
samba
2.sftp客户端连接
sftp -oPort=22 root@192.168.25.137
put /etc/hosts /tmp
get /etc/hosts /home/omd
3.sftp小结:
1.linux下使用命令: sftp -oPort=22 root@x.x.x.x
2.put加客户端本地路径上传
3.get下载服务器端内容到本地
4.远程连接默认连接用户的家目录
复制代码
ssh 常见命令参数
usage: ssh [-1246AaCfgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec]
[-D [bind_address:]port] [-e escape_char] [-F configfile]
[-i identity_file] [-L [bind_address:]port:host:hostport]
[-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port]
[-R [bind_address:]port:host:hostport] [-S ctl_path]
[-W host:port] [-w local_tun[:remote_tun]]
[user@]hostname [command]
复制代码
关于后台 ssh 服务的相关
# 查询openssl软件
rpm -qa openssh openssl
# 查询sshd进程
ps -ef | grep ssh
--> /usr/sbin/sshd
# 查看ssh端口
netstat -lntup | grep ssh
ss | grep ssh (效果同上,同下,好用)
netstat -a | grep ssh(记住这个)
netstat -lnt | grep 22 ==> 查看22端口有没有开/ssh服务有没有开启
技巧: netstat -lnt | grep ssh | wc -l -->只要大于2个就是ssh服务就是好的
# 查看ssh的秘钥目录
ll /root/.ssh/known_hosts # 当前用户家目录的.ssh目录下
# ssh的配置文件
cat /etc/ssh/sshd_config
# ssh服务的关闭
service sshd stop
# ssh服务的开启:
service sshd start
# ssh服务的重启
service sshd reload [停止进程后重启] ==> 推荐
service sshd restart [干掉进程后重启] ==> 不推荐
# ssh远程登录
ssh 192.168.1.100 # 默认利用当前宿主用户的用户名登录
ssh omd@192.168.1.100 # 利用远程机的用户登录
ssh omd@192.168.1.100 -o stricthostkeychecking=no # 首次登陆免输yes登录
ssh omd@192.168.1.100 "ls /home/omd" # 当前服务器A远程登录服务器B后执行某个命令
ssh omd@192.168.1.100 -t "sh /home/omd/ftl.sh" # 当前服务器A远程登录服务器B后执行某个脚本
复制代码
ssh 免密设置
1、进入用户的家目录
[root@localhost ~]# cd /root/.ssh/ 【root用户就在root目录下的.ssh目录】
[root@localhost ~]# cd /home/omd/.ssh/ 【普通用户就是在家目录下的.ssh目录】
复制代码
2、根据 DSA 算法生成私钥和公钥【默认建立在当前用户的家目录】
[root@localhost .ssh]# ssh-keygen -t dsa # 一路回车即可
id_dsa -->私钥(钥匙)
id_dsa.pub -->公钥(锁)
复制代码
3.拷贝公钥给目标服务器
[root@localhost .ssh]# ssh-copy-id -i id_dsa.pub omd@192.168.25.110 【 使用ssh登录的默认端口22】
[root@localhost .ssh]# ssh-copy-id -i id_dsa.pub –p 666 omd@192.168.25.120 【使用ssh登录设置的端口666】
复制代码
4. 查看目标服务器生成的文件
[omd@localhost .ssh]$ ll /home/omd/.ssh/authorized_keys
复制代码
5. 免密码登录目标服务器
6. 总结一下钥匙和锁的关系
1.多个钥匙开一把锁
把id_dsa.pub 复制给各个服务器
2.一个钥匙开duobasuo
把id_dsa 传给各个服务器
把id_dsa 传给自己
复制代码
ssh 排查问题
1.判断物理链路是否通 ping 192.168.25.130 线路 | 防火墙 | 是否同一个网的
ping 本身是icmp协议
2.判断服务是否正常
telnet 192.168.25.130 22
3.Linux防火墙
service iptables status ==> /etc/init.d/iptables status
4.打开ssh的调测进行观察
ssh -vvv omd@192.168.1.100
复制代码
SSH 批量分发与管理方案小结
1.利用 root 做 ssh key 验证
优点:简单,易用缺点:安全性能差,无法禁止 root 远程连接
2.利用普通用户 omd (推荐)
思路:把要分发的文件拷贝到服务器用户的家目录,然后利用 sudo 提权拷贝分发的文件和对应目录优点:安全缺点:复杂,配置麻烦 1.sudo 提权 echo 'omd All=(All) NOPASSWD:/usr/bin/rsync' >> /etc/sudoersvisudo -cgrep omd /etc/sudoers2.ssh 分发到服务器的家目录 ssh -p22 -r /etc/hosts omd@192.168.25.137:~3.ssh 使用 sudo 复制到目标服务器的/etcssh -t omd@192.168.25.137 sudo rsync hosts /etc/
3.拓展方案 2,不用 sudo,而是设置 suid 对固定命令提权
优点:相当安全
缺点:复杂,安全性较差,任何人都可以处理带有suid权限的命令
1.which rsync
2.chmod 4755 /usr/bin/rsync
复制代码
ssh 章节小结
1.ssh 远程的加密连接协议,相关软件 openssh,openssl2.默认端口 223.ssh 版本协议 4.服务器 ssh 连接,ftp 连接,sshd 守护进程,开机启动 5.ssh 客户端重要命令:ssh(用户登录 &&远程命令),scp,sftp,6.安全验证方式:口令,密钥 学习原理 7.ssh 服务优化:改端口,改监听,no root,no empty,no DNS,8.ssh 密钥对,公钥在服务器端,私钥在客户端
修改 ssh 服务的启动文件 sshd 的几个点
1-1修改 /etc/ssh/sshd_config<br> GSSAPIAuthentication yes 解决一台服务器管理多个ssh服务
UseDNS no 加快响应速度因为在内网环境下
PermitRootLogin no 不运行root用户直接登录
Port 11544 更改访问端口号
ListenAddress 192.168.25.130 只监听内网的IP
Match User anoncvs 当前环境允许登录的用户
PermitRootLogin no 是否允许root用户登录,一般不允许开
1-2重启服务
service sshd restart 写入命令进内存
service sshd reload(优先) reload是一个平滑的访问,不影响用户使用
1-3查看连接端口
netstat -an | grep EST
复制代码
SSH 跳过 HostKeyChecking,不用输入 yes
SSH 跳过输入 ssh 跳过 RSA key fingerprint 输入 yes/no
在配置大量的节点之间需要 ssh 连通的时候,如果自动复制很多节点,都需要输入 yes,两两节点之间都要互通一次,这样会造成很大的麻烦
**解决 1;**修改配置文件/etc/ssh/ssh_config
找 到 # StrictHostKeyChecking ask
修改为:StrictHostKeyChecking no
复制代码
解决 2: 添加参数 –o 【o=option】
ssh root@192.168.25.133 -o "StrictHostKeyChecking no"
复制代码
ssh 带密码登录之 sshpass 的安装【下载地址】https://sourceforge.net/projects/sshpass/files/latest/download
上传文件到服务器
CentOS 下安装:
[root@localhost ~]# tar xf sshpass-1.06.tar.gz
[root@localhost ~]# cd sshpass-1.06
[root@localhost sshpass-1.06]# ./configure
[root@localhost sshpass-1.06]# make && make install
复制代码
检查是否安装成功:
[root@localhost sshpass-1.06]# which sshpass
/usr/local/bin/sshpass
复制代码
远程登录主机:
sshpass -p FTL600@HH ssh omd@192.168.25.110 -o "StrictHostKeyChecking no"
复制代码
注意:如果是第一次登录,需要输入手动 yes,此时 sshpass 并不会给提示,所以登录异常 Ubuntu 下安装方法一[推荐]:简单
omd@omd-virtual-machine:~/sshpass-1.06$ sudo apt install sshpass
复制代码
安装成功:
omd@omd-virtual-machine:~/sshpass-1.06$ which sshpass
复制代码
Ubuntu 下安装方法二:
omd@omd-virtual-machine:~$ tar xf sshpass-1.06.tar.gz
omd@omd-virtual-machine:~$ cd sshpass-1.06/
omd @omd-virtual-machine:~/sshpass-1.06$ ./configure
omd@omd-virtual-machine:~/sshpass-1.06$ sudo make && make install
其同CentOS下安装
复制代码
附 ssh 的配置文件
配置文件这里就不贴了,免得你们说我水字数,我整理的这份《Linux 命令大全》里面都有,还有一些其他的关于 Linux 的学习资料,可以免费分享给大伙,点击下方蓝字直接领取就可以了
Linux学习书籍和笔记合集
end
不会吧,看到这里了都不点个赞吗?这合理吗?这不合理!!!
评论