ssh需要知道的那些事儿
1、使用ssh的原因
远程管理linux系统基本上都要使用到ssh,原因很简单:
- telnet、FTP等传输方式是以明文传送用户认证信息,本质上是不安全的,存在被网络窃听的危险。
- SSH(Secure Shell)目前较可靠,是专为远程登录会话和其他网络服务提供安全性的协议。利用SSH协议可以有效防止远程管理过程中的信息泄露问题,透过SSH可以对所有传输的数据进行加密,也能够防止DNS欺骗和IP欺骗。
ssh_config和sshd_config都是ssh服务器的配置文件,二者区别在于,前者是针对客户端的配置文件,后者则是针对服务端的配置文件。两个配置文件都允许你通过设置不同的选项来改变客户端程序的运行方式。下面列出来的是两个配置文件中最重要的一些关键词,每一行为“关键词&值”的形式,其中“关键词”是忽略大小写的
2、ssh配置文件
ubuntu默认存在:/etc/ssh/ssh_config 但是安装ssh之后会有:/etc/ssh/sshd_config 设置root远程登录:PermitRootLogin yes 需要主机设置root密码:passwd
UOS:(openssh-client) /etc/ssh/ssh_config
3、不同Linux系统网络重启
if [ "${ID_LIKE}" == "debian" ]; then
/etc/init.d/networking restart
elif [ "${ID_LIKE}" == "redhat" ]; then
/etc/init.d/network restart
else
echo "unknown ID_LIKE"
fi
3、能ping得通服务器但却ssh不了的原因
我遇到的问题是这样的: 这个星期装服务器,搞了一个集群,服务器是双网卡,一个网卡连外网222开头,一个网卡连内网192开头,在系统等一切都安全成功,网络配置成功之后,奇怪的事情发生了,内网内任意一台主机ssh到这个台服务器上ssh root@222.....,都没有任何问题,但是从外网ssh root@222...就无法连接,报的错误是:
ssh_exchange_identification: read: Connection reset by peer
可能原因及排除过程: (1)怀疑是网络不通,但从外网ping 222.....是能ping的通的,排除了网络问题; (2)防火墙问题?,关闭防火墙:systemctl stop firewalld.sercive,没用,同样是这样; (3)SSh服务没开?也不太可能,因为内网都能ssh到啊,不管,重启一遍 : service sshd restart
查看22端口: netstat -tunpl | grep 22,端口是监听着的 查看ssh状态: service sshd status, sshd在运行。
(4)sshd权限变高了?查看一下: ll /var/empty/ 也没有
(5)秘钥问题?
清除/root/.ssh/known_hosts文件和你所要连接ip或者主机名有关的ssh加密Key? 发现好像还没有这个文件,因为是刚装的系统,服务器还没有ssh别人,所以没有这个文件。这里说一下,这个文件是ssh别的主机的时候和别的主机建立的ssh通信,通常shh同一台主机的时候会在这里,如果ssh一台主机,然后那台主机修改了一些配置,RSA加密更改了等等,会发现连不上的。会出现一下这个错误,说明就是要删除/root/.ssh/known_hosts文件相关的ip和主机名了。 (6)vi /etc/ssh/sshd.conf(有些可能是vi /etc/ssh/sshd.confg) 找到X11Forwarding yes,将其注释掉或者改为no,重启启动ssh服务。
解决办法
我的解决方法就是重新安装ssh。 后来的后来,我终于明白。。。。。 原来是没有装ssh 报错:ssh:connect to host localhost port 22: Connection refused ps -ef|grep sshd,如果出现了sshd,则说明安装了,反之则没安装。 sudo apt-get install openssh-server
4、Windows远程操作
右键点击’我的电脑‘进入’属性‘点击左过菜单栏中的’远程设置‘;把远程桌面选项设置成’允许运行任意版本远程桌面的计算机连接‘。 使用mstsc命令
5、报错Permission denied, please try again.
非常非常奇怪,能ping通,出现这种情况90%是密码错误,但是我能确认密码100%正确,这又是为什么呢?
折腾了一半天root用户是否存在?密码是否设置正确?不停地试密码。。。。
以为这样能解决: 处理这个问题最好的分析方法就是查看系统登录日志。(举例:centos 系统可以查看 /var/log/secure日志) 从中可以看到这样的记录:pam_tally2(sshd:auth): user xxxxxx (500) tally 74, deny 5 (账号登录失败次数过多导致被锁定) 处理方法: pam_tally2 --reset -u xxx 解锁即可
最终才意识到这种情况俺遇到了很多次: 服务端SSH 服务配置了禁止root用户登录策略。
通过 cat 等指令查看 /etc/ssh/sshd_config 中是否包含类似如下配置: PermitRootLogin no PermitRootLogin prohibit-password
修改为yes即可。
6、ssh配置正常却连接不上
systemctl stop firewalld.service service firewalld stop
发现ping不通,好办,一般来说是防火墙导致。
银河麒麟中设置公共网络为办公网络。
7、重启ssh服务
/etc/init.d/sshd restart service sshd restart /etc/init.d/ssh restart
好奇怪,到底哪个是真的?
8、ssh反映特别慢,但是网络没有问题的时怎么办
vi sshd_config 找到注释的useDNS yes,修改为如下,并取消注释 useDNS no
完成添加后,保存退出
重启sshd服务 /etc/init.d/sshd restart
退出连接session 重新创建一个,感觉一下,是不是反映速度0.1秒都不到,特别迅速
如果是想让图形化界面连接快的话 还是找到vi sshd_config 找到#GSSAPIAuthentication yes 将yes修改为no 并且取消注释 GSSAPIAuthentication no 重启sshd服务即可
9、ssh/scp指定端口用法
1、scp指定端口传输,端口需放在scp后面 scp -P 34543 root@1.2.3.4:/home/admin/xx ./
2、ssh指定端口登录: ssh -p 34543 root@1.2.3.4
10、chroot环境无法使用scp命令发送文件,报错PRNG is not seeded
[root@chroot <vtcompile> ]#ssh-keygen -t rsa
PRNG is not seeded
[root@chroot <vtcompile> ]#ps aux | grep sshd
Error, do this: mount -t proc proc /proc
[root@chroot <vtcompile> ]#ps aux
Error, do this: mount -t proc proc /proc
[root@chroot <vtcompile> ]#top
Error, do this: mount -t proc proc /proc
[root@chroot <vtcompile> ]#ls /proc/
[root@chroot <vtcompile> ]#mount -t proc proc /proc
[root@chroot <vtcompile> ]#ls /proc/
1 12 13011 1624 20 23896 24729 24858 25184 28026 36 404 421 667 78 8 buddyinfo crypto fb irq kpagecount modules sched_debug sys uptime
10 12837 141 17 20523 23898 24731 24873 25185 29 37 411 5 669 7880 80 bus devices filesystems kallsyms kpageflags mounts self sysrq-trigger version
[root@chroot <vtcompile> ]#scp a.out root@1.2.3.4:/usr/bin/
PRNG is not seeded
lost connection
[root@chroot <vtcompile> ]#ps aux | grep sshd
root 416 0.0 0.1 55164 4688 ? Ss 2021 105:11 /usr/sbin/sshd -D
sshd 683 0.0 0.0 53236 1964 ? Ss 2021 0:02 /usr/sbin/exim4 -bd -q30m
root 7880 0.0 0.1 80628 6628 ? Ss Jan11 0:00 sshd: vtcompile@pts/2
root 7882 0.0 0.1 80628 5796 ? Ss Jan11 0:00 sshd: vtcompile@notty
root 12837 0.0 0.1 80632 6156 ? Ss Jan10 0:01 sshd: vtcompile@pts/1
root 12842 0.0 0.1 80628 5796 ? Ss Jan10 0:00 sshd: vtcompile@notty
root 23894 0.0 0.1 80628 6644 ? Ss Jan11 0:00 sshd: vtcompile@pts/0
root 23896 0.0 0.1 80628 5916 ? Ss Jan11 0:00 sshd: vtcompile@notty
root 24727 0.0 0.1 80628 6172 ? Ss 03:16 0:00 sshd: vtcompile@pts/5
root 24729 0.0 0.1 80628 5928 ? Ss 03:16 0:00 sshd: vtcompile@notty
root 24854 0.0 0.1 80640 6336 ? Ss Jan11 0:00 sshd: vtcompile@pts/3
root 24856 0.0 0.1 80628 5772 ? Ss Jan11 0:00 sshd: vtcompile@notty
root 25216 1.0 0.1 79280 5688 ? Ss 03:23 0:00 sshd: root [priv]
saned 25217 0.0 0.0 56508 3104 ? S 03:23 0:00 sshd: root [net]
root 25219 0.0 0.0 7840 516 ? R+ 03:23 0:00 grep sshd
root 27980 0.0 0.1 80628 6620 ? Ss Jan11 0:00 sshd: vtcompile@pts/4
root 27982 0.0 0.1 80628 5964 ? Ss Jan11 0:00 sshd: vtcompile@notty
[root@chroot <vtcompile> ]#ssh-keygen -t rsa
PRNG is not seeded
[root@chroot <vtcompile> ]#ls /dev/
null
发现dev文件夹是空的,chroot环境。
[root@chroot <vtcompile> / ]#mount
proc on /proc type proc (rw,relatime)
[root@chroot <vtcompile> / ]#fdisk -l
[root@chroot <vtcompile> / ]#df
df: `/dev/pts': No such file or directory
df: `/sys/kernel/security': No such file or directory
df: `/dev/shm': No such file or directory
df: `/sys/fs/cgroup': No such file or directory
df: `/sys/fs/cgroup/systemd': No such file or directory
df: `/sys/fs/pstore': No such file or directory
df: `/sys/fs/cgroup/cpuset': No such file or directory
df: `/sys/fs/cgroup/cpu,cpuacct': No such file or directory
df: `/sys/fs/cgroup/devices': No such file or directory
df: `/sys/fs/cgroup/freezer': No such file or directory
df: `/sys/fs/cgroup/net_cls,net_prio': No such file or directory
df: `/sys/fs/cgroup/blkio': No such file or directory
df: `/sys/fs/cgroup/perf_event': No such file or directory
df: `/dev/mqueue': No such file or directory
df: `/sys/kernel/debug': No such file or directory
df: `/dev/hugepages': No such file or directory
df: `/home/envbaseroot/envbase_vt/run/lock': No such file or directory
df: `/home/envbaseroot/envbase_vt/run/shm': No such file or directory
df: `/home/envbaseroot/envbase_vt/dev': No such file or directory
df: `/home/envbaseroot/envbase_vt/dev/pts': No such file or directory
df: `/run/rpc_pipefs': No such file or directory
df: `/home/envbaseroot/envbase_vt/home': No such file or directory
df: `/home/envbaseroot/envbase_vt/part1': No such file or directory
df: `/home/envbaseroot/envbase_vt/home/envbaseroot/envbase_vt/part1': No such file or directory
df: `/home/envbaseroot/envbase_vt/part1/VMP5.5.1/dev': No such file or directory
df: `/home/envbaseroot/envbase_vt/home/envbaseroot/envbase_vt/part1/VMP5.5.1/dev': No such file or directory
df: `/home/envbaseroot/envbase_vt/part1/VMP5.4.14/dev': No such file or directory
df: `/home/envbaseroot/envbase_vt/home/envbaseroot/envbase_vt/part1/VMP5.4.14/dev': No such file or directory
df: `/home/envbaseroot/envbase_vt/home/envbaseroot/envbase_vt/part1/VMP5.4.14/dev': No such file or directory
Filesystem 1K-blocks Used Available Use% Mounted on
rootfs 515930552 408669560 81030208 84% /
sysfs 515930552 408669560 81030208 84% /sys
udev 515930552 408669560 81030208 84% /dev
tmpfs 515930552 408669560 81030208 84% /run
/dev/vda1 515930552 408669560 81030208 84% /
tmpfs 515930552 408669560 81030208 84% /run/lock
[root@chroot <vtcompile> / ]#mount -t dev dev /dev
mount: unknown filesystem type 'dev'
[root@chroot <vtcompile> / ]#
无奈,百度也没有找到合适的方法,然后我从其他环境的dev目录拷贝到当前环境,然后就成功可用了。 另外一种方法是退出chroot环境,可能是这个chroot环境没有拷贝/dev/目录下面的文件导致的。
[root@chroot <vtcompile> / ]#fdisk -l
Disk /dev/vda: 214.7 GB, 214748364800 bytes
255 heads, 63 sectors/track, 26108 cylinders, total 419430400 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x99b00d77
Device Boot Start End Blocks Id System
/dev/vda1 * 2048 402372607 201185280 83 Linux
/dev/vda2 402374654 419428351 8526849 5 Extended
/dev/vda5 402374656 419428351 8526848 82 Linux swap / Solaris
Disk /dev/vdb: 536.9 GB, 536870912000 bytes
16 heads, 63 sectors/track, 1040253 cylinders, total 1048576000 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Disk /dev/vdb doesn't contain a valid partition table
[root@chroot <vtcompile> / ]#df
Filesystem 1K-blocks Used Available Use% Mounted on
rootfs 515930552 408669664 81030104 84% /
sysfs 515930552 408669664 81030104 84% /sys
udev 515930552 408669664 81030104 84% /dev
devpts 515930552 408669664 81030104 84% /dev/pts
tmpfs 515930552 408669664 81030104 84% /run
/dev/vda1 515930552 408669664 81030104 84% /
tmpfs 515930552 408669664 81030104 84% /dev/shm
tmpfs 515930552 408669664 81030104 84% /run/lock
mqueue 515930552 408669664 81030104 84% /dev/mqueue
hugetlbfs 515930552 408669664 81030104 84% /dev/hugepages
[root@chroot <vtcompile> / ]#ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): ^C
[root@chroot <vtcompile> / ]#
11、奇怪的现象无法root用户连接登录
已修改可以使用root用户连接登录:/etc/ssh/sshd_config中PermitRootLogin yes 然后重启服务:/etc/init.d/ssh restart 然鹅密码输入正确还是报错:Permission denied (publickey,password).
然后我使用普通用户登录,使用su命令切换都是正常,然后退出后使用root用户登录也正常 猜测可能是ssh服务重启时间长???还是由于我先连接的原因???
12、ssh连接不上
报错:
13/09/2022 16:57.31 /home/mobaxterm # ssh root@172.22.16.73
ssh: connect to host 172.22.16.73 port 22: Connection refused
但是修改服务器的/etc/ssh/sshd_config文件即可:
ListenAddress 127.0.0.1
改为
ListenAddress 0.0.0.0
有时候发现还是连接不上,修改之后报错依然是这样。或者是ssh: connect to host 172.22.16.73 port 22: Connection timed out。 ping的通,但是22端口不通,其他一台主机能22端口通。主要区别在于网段不同。
想不通,实在是想不通。
12-1、扩展:22端口是否能ping通
Ping命令使用的是ICMP协议,不是端口号。ICMP不像http、https、FTP……等有对应的端口,ping也属于一个通信协议,是TCP/IP协议的一部分。利用“ping”命令可以检查网络是否连通,可以很好地帮助我们分析和判断网络故障,ping只有在安装了TCP/IP协议以后才可以使用,往往系统安装好就已经集成了。
Ping不使用端口,而是使用协议。Ping通过将Internet控制消息协议(ICMP)回显请求数据包发送到目标主机并等待ICMP回显应答来进行操作。但是,出于安全考虑,通常你可以禁用ping功能。
ping命令不支持端口检测,使用telnet命令即可。下载tcping.exe也可以。
C:\Users\User\Downloads>tcping.exe 172.22.65.15
Probing 172.22.65.15:80/tcp - No response - time=2026.356ms
Probing 172.22.65.15:80/tcp - No response - time=2004.114ms
Control-C
Probing 172.22.65.15:80/tcp - No response - time=869.342ms
Ping statistics for 172.22.65.15:80
3 probes sent.
0 successful, 3 failed. (100.00% fail)
Was unable to connect, cannot provide trip statistics.
C:\Users\User\Downloads>
C:\Users\User\Downloads>
C:\Users\User\Downloads>tcping.exe 172.22.65.15 22
Probing 172.22.65.15:22/tcp - Port is open - time=15.560ms
Probing 172.22.65.15:22/tcp - Port is open - time=0.860ms
Probing 172.22.65.15:22/tcp - Port is open - time=1.135ms
Probing 172.22.65.15:22/tcp - Port is open - time=1.153ms
Ping statistics for 172.22.65.15:22
4 probes sent.
4 successful, 0 failed. (0.00% fail)
Approximate trip times in milli-seconds:
Minimum = 0.860ms, Maximum = 15.560ms, Average = 4.677ms
windows10默认不支持,需要安装telnet客户端: 1、右键单击电脑桌面上的“我的电脑”图标,在展开的菜单中单击“属性”按钮打开属性窗口。 2、点击弹出窗口上的“控制面板”按钮,点击“程序”按钮。 3、进入程序界面后,点击窗口的“windows激活或禁用功能”按钮来设置界面。 4、在弹出窗口中选择“telnet客户端”,点击“OK”按钮telnet启动客户端: 5、此时cmd使用telnet命令,将ip和端口号写在后面,确认端口是否打开。
C:\Users\User\Downloads>telnet
‘telnet’不是内部或外部命令,也不是可运行的程序或批处理文件。
欢迎使用 Microsoft Telnet Client
Escape 字符为 'CTRL+]'
Microsoft Telnet>
C:\Users\User\Downloads>telnet 172.22.65.15
正在连接172.22.65.15...无法打开到主机的连接。 在端口 23: 连接失败
C:\Users\User\Downloads>telnet 172.22.65.15 22
SSH-2.0-OpenSSH_7.2p2 Ubuntu-4ubuntu2.10
Protocol mismatch.
遗失对主机的连接。
12-2、能ping通,但是22端口不通
C:\Users\User\Downloads>ping 172.22.16.73
正在 Ping 172.22.16.73 具有 32 字节的数据:
来自 172.22.16.73 的回复: 字节=32 时间<1ms TTL=61
来自 172.22.16.73 的回复: 字节=32 时间<1ms TTL=61
来自 172.22.16.73 的回复: 字节=32 时间<1ms TTL=61
来自 172.22.16.73 的回复: 字节=32 时间=1ms TTL=61
172.22.16.73 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 0ms,最长 = 1ms,平均 = 0ms
C:\Users\User\Downloads>tcping 172.22.16.73 22
Probing 172.22.16.73:22/tcp - No response - time=2027.149ms
Probing 172.22.16.73:22/tcp - No response - time=2014.705ms
Probing 172.22.16.73:22/tcp - No response - time=2009.826ms
Probing 172.22.16.73:22/tcp - No response - time=2007.349ms
Ping statistics for 172.22.16.73:22
4 probes sent.
0 successful, 4 failed. (100.00% fail)
Was unable to connect, cannot provide trip statistics.
C:\Users\User\Downloads>telnet 172.22.16.73 22
正在连接172.22.16.73...无法打开到主机的连接。 在端口 22: 连接失败
查看ssh服务是否启动: systemctl status sshd 其中一种场景居然是服务没有启动,启动之后就能通22端口了,并且能ssh了。
查看端口是否打开: netstat -lnput |grep :22
[root@ubuntu0006:~] #netstat -lnput |grep :22
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 927/sshd
[root@ubuntu0006:~] #netstat -anp | grep :22
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 927/sshd
tcp 0 0 172.22.65.15:22 172.22.64.246:26504 ESTABLISHED 5348/sshd: root@not
tcp 0 48 172.22.65.15:22 172.22.64.246:26503 ESTABLISHED 5331/2
root@adesk:~# netstat -lnput |grep :22
tcp 0 0 127.0.0.1:22 0.0.0.0:* LISTEN 5300/sshd
root@adesk:~# netstat -anp | grep :22
tcp 0 0 127.0.0.1:22 0.0.0.0:* LISTEN 5300/sshd
tcp 0 0 172.22.16.73:22 172.22.64.246:25762 ESTABLISHED 4943/sshd: root@not
tcp 0 36 172.22.16.73:22 172.22.64.246:25756 ESTABLISHED 4937/sshd: root@pts
最终解决: 0.0.0.0表示监听所有的IPv4地址,出于安全考虑,设置成主机的ip地址即可访问。
root@adesk:~# netstat -anp | grep :22
tcp 0 0 172.22.16.73:22 0.0.0.0:* LISTEN 28357/sshd
tcp 0 0 172.22.16.73:22 172.22.64.246:22000 TIME_WAIT -
tcp 0 0 172.22.16.73:22 172.22.64.246:25762 ESTABLISHED 4943/sshd: root@not
tcp 0 36 172.22.16.73:22 172.22.64.246:25756 ESTABLISHED 4937/sshd: root@pts
root@adesk:~# netstat -lnput |grep :22
tcp 0 0 172.22.16.73:22 0.0.0.0:* LISTEN 28357/sshd
C:\Users\User\Downloads>telnet 172.22.16.73 22
SSH-2.0-OpenSSH_7.4p1 Debian-10+deb9u6
Protocol mismatch.
遗失对主机的连接。
13、报错No route to host问题解决
起初使用scp -P port root@1.2.3.4:/home/gf .拷贝报错,后面发现ssh命令也是同样报错。(注意是大写字母P,小写字母-p 已经被rcp 使用)
解决思路: ssh端口设置是否正确 网络是否可达 防火墙策略是否合理
既然ssh都不通,那就另想版本,使用跳板进行拷贝,即使用第三台机器进行中转拷贝。