Linux必会之SSH安装/配置/使用/进阶指北
Linux安装配置SSH服务
ssh服务是什么?
传统的网络服务程序,如:
ftp
、pop
和telnet
在本质上都是不安全的,因为它们在网络上用明文传送口令和数据,别有用心的人非常容易就可以截获这些口令和数据。通过使用SSH,你可以把所有传输的数据进行加密,有效的防止中间人攻击,也能够防止DNS欺骗和IP欺骗。使用SSH,还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。SSH有很多功能,它既可以代替Telnet
,又可以为FTP
、PoP
、甚至为PPP
提供一个安全的"通道"。
1. 安装SSH
安装前检查ssh
服务状态:
sudo ps -e |grep ssh
如果显示只有ssh-agent
, 而没有sshd
服务项, 那么你的系统中ssh服务端程序便没有启动, 启动ssh服务:
sudo service ssh start
#或者使用
systemctl start ssh
如果找不到sshd
服务,那就说明ssh服务端没有安装。
也可以用查看下端口监听,有没有22端口也可以识别ssh服务是否正常启动。
红帽系发行版
Redhat
,Centos
等系列linux发行版,用yum
在线安装:
sudo yum install openssh-server
Debian系发行版
如Ubuntu
,Linux Mint
, Kali
等系列的linux发行版,则用apt
来在线安装:
sudo apt-get install openssh-server
2. SSH服务常用操作
启动服务
确定安装ssh服务完成后,启动ssh服务:
sudo service ssh start
#或者
sudo systemctl start ssh
查看ssh状态:
sudo service ssh status
#或者
sudo systemctl status ssh
停止服务
sudo service ssh stop
#或者
sudo systemctl stop ssh
ssh服务操作
启动,停止,重启,运行状态等服务操作如下:
sudo service ssh {start/stop/reload/force-reload/restart/try-restart/status}
#或者如下:
systemctl {start/stop/reload/force-reload/restart/try-restart/status} ssh
Redhat7|Centos7|Ubuntu18.04及以上版本使用
systemctl
, 老旧旧版本可使用service
。
3. 配置SSH
3.1 开机自启动
sudo systemctl enable ssh # 开机自启动
sudo systemctl disable ssh # 禁止开机启动
有关ssh服务端配置文件 /etc/ssh/sshd_config
的详细都可以用下面这条语句查看获取:
man sshd_config
3.2 更改默认端口:
ssh服务默认使用22
端口,若需更改在ssh_config
文件中修改成自己想要的端口.
vim /etc/ssh/sshd_config
在Port 22
这一行, 命令模式下x
键 删除#号字符, yy
复制此行内容, p
键复制到下行,并更改成要修改的端口号. 命令模式下:x
保存,或者wq
保存. 编辑完后重启下ssh服务:
service sshd restart
两行
Port
项 的注释都要去掉,上一行是默认端口,下一行是自定义端口.如果是Centos,Redhat等系发行版,需关闭selinx才能更改端口成功.
3.3 sshd配置文件
sshd
配置文档sshd_config
还有很多安全选项可自行更改,具体不细述,可以来一篇Linux系统安全专题细讲下,除非有安全需求;可以用ssh密钥登陆,提高了系统安全性。
4. SSH高级用法
4.1 SSH连接远程主机:
(比如你用Windows连接服务器)
ssh 用户名@IP
ssh root@192.168.1.22
# 输入yes回车,输入密码即可登录。端口默认22的情况下,可直接用户名密码连接登录
ssh -P 端口 用户名@IP
ssh -P 2522 root@192.168.75.188
#如果更改了默认端口,则加上参数:大写的P 指定端口。
4.2 SSH免密登录远程主机:
为什么要SSH免密?
比如在Windows上,不想每次登录都输入系统密码。免密登录是利用非对称加密(RSA加密算法
)的原理,在本地客户端保存SSH私钥,服务器保存SSH公钥的方法实现的。理论上,在一定基础上提高了账户安全性,因为用用户名密码登录方式的话有被爆破的风险,恰好你又使用了弱口令,即便是普通用户,也可以进一步的进行提权。
- 先修改SSH配置文件的密钥验证,这里以
Ubuntu 22.04 LTS
环境root
用户为例,在/etc/ssh/sshd_config
文件中去除如下语句的注释:
#去掉前面的注释 #字符即可
PubkeyAuthentication yes #启用密钥配对认证方式
AuthorizedKeysFile .ssh/authorized_keys #公钥存放文件路径
重启SSH服务:
systemctl restart ssh
- 然后在远程服务器的终端上生成SSH密钥:
ssh-keygen
# 默认即可,可选 `-t rsa`参数选择加密算法,不过不需要,默认就是rsa加密。
连按三次回车,无需添加密码修改路径。生成完毕后,会有两个文件:id_rsa
,id_rsa.pub
;一个是私钥(在本地),一个是公钥(在服务端)。
如果是Linux,密钥在/home/用户名/.ssh/
目录中也就是~/.ssh
;
如果是Windows,密钥便在C:\Users\Administrator/.ssh/
目录中(自己用户名的文件下)。
- 服务器密钥拷贝
①在本地系统环境生成密钥后,把公钥id_rsa.pub
上传至远程服务器即可;
②如果是操控着远程主机生成的密钥,则把私钥id_rsa
下载到本机。
本地指的是主控端主机,远程是值被控端主机,操作如下:
- 可以利用终端连接工具自带的
sftp
功能,找到密钥文件直接拖拽保存到本地,方便快捷,如:FinalShell
,MobaXterm
等。 - SSH终端工具没有自带SFTP功能的:
## 将远程服务器上生成的私钥文件 `id_rsa` 下载到本地
#安装传输工具,非root用户加sudo
apt install lrzsz
#确认私钥文件并执行下载,会弹窗供选择本地存储的位置
sz ~/.ssh/id_rsa
#在线拷贝
ssh-copy-id -p 端口 用户名@IP
ssh-copy-id geek0ne@192.168.8.8
- 也可以用
scp
命令将密钥文件传输到远程主机,后面有scp
用法。
SSH密钥分配好后,就可以用终端工具以密钥的方式进行登录主机了,将存储在本地的私钥导入,与远程服务器的公钥进行匹配认证,即可成功登录二无须用户密码。
4.3 SCP传输文件
不管是Linux与Linux,还是Windows与Linux,互传文件的方法和软件有很多;但只要两台机器上有安装ssh服务,那么就可以使用ssh协议传输文件,用法如下。
- 本机传输文件至远程服务器:
# scp 文件名 远程用户名@IP:远程存放路径
scp demo.c geek0ne@192.168.8.8:/home/geek0ne/Code #传输单个文件
scp -r Demo geek0ne@192.168.8.8:/home/geek0ne/Code #传输目录
- 从远程服务器下载文件到本机:
# scp 远程用户名@IP:远程目录/文件存放路径 本地目录文件
scp geek0ne@192.168.8.8:/home/geek0ne/Code/demo.c demo.c #传输单个文件
scp -r geek0ne@192.168.8.8:/home/geek0ne/Code/Demo Demo #传输目录
上传和下载的使用方法只是目前对象前后调换位置而已,不仅可传输文件,也能传输文件夹/目录,加参数
-r
目标存储位置如果不设置,则默认在当前路径下。
注意:
IP地址和目录之间有个冒号
:
不能遗漏,如果冒号后面不是绝对路径,则以用户家目录为参照。
如果更改端口,还是加参数: -P port
如果是目录必需要加参数:-r
4.4 SSH配置别名
如果不用shell终端工具,每次登录连接,都要输入ssh 用户名@IP
这一串字符,时间一长,会不会觉得这种重复性的操作有点浪费时间,况且你每次都能准确无误的手敲IP和username么,如果服务器数量一多呢。(用shell终端管理工具的请不要发言 /滑稽)
配置别名就能进一步的减少输入,比如用ssh ave
替代连接字符串,方便"偷懒",提高工作效率,毕竟一滴水积少成多,亦能成塘池。在主目录下,~/.ssh/config
里面追加下面内容:
Host ave
HostName IP
User geek0ne
Port 22
追加编辑保存后,就可用ssh ave
来连接远程主机了, scp
命令也同样适用 。
5. 卸载SSH
ssh服务是远程服务器必备服务,当然也可以卸载掉服务端,只留下ssh客户端来主动连接登录其它主机,即便不装sshd
服务也是可以连接远程机器,只是不能被远程主机连接。避免了本机被别的机器进行爆破,减少了安全风险,增加了安全性。下面卸载sshd
服务端:
红帽系发行版Redhat
, Centos
等linux发行版,卸载用以下命令:
sudo yum remove sshd
Debian系发行版,Ubuntu,Linux mint等linux发行版,卸载用以下命令:
sudo apt –purge remove sshd
本文作者:Geek0ne
本文链接:https://geek0ne.com/LinuxAce/ssh.html
本文根据知识共享署名4.0国际许可进行许可,转载/引用请标注来源!