SSH

OpenSSH

github

升级

用法

sshpass

SSH 使用直接 TTY 访问来确保密码确实是由交互式键盘用户发出的,sshpass 提供了非交互式的方式来验证 SSH 会话。

sshpass 在一个专用 tty 中运行 SSH,让它误以为从交互用户那里获得了密码。

免密登录

ssh 无密码登录要使用公钥与私钥。linux下可以用用ssh-keygen生成公钥/私钥对。

有机器A(192.168.1.155),B(192.168.1.181)。现想A通过ssh免密码登录到B。

1.在A机下生成公钥/私钥对。

-P表示密码,-P '' 就表示空密码,也可以不用-P参数,这样就要三车回车,用-P就一次回车。 这将生成一对密钥文件:~/.ssh/id_rsa(私钥)和 ~/.ssh/id_rsa.pub(公钥)。

2.使用 ssh-copy-id 将A机生成的公钥复制到远程主机的 ~/.ssh/authorized_keys 文件中。 执行该命令需要输入远程主机的密码。

脚本中为了跳过交互模式,可以将远程主机的 SSH 主机密钥(Host Key)追加到本地的 ~/.ssh/known_hosts 文件中。

3.为了实现通过ssh登陆本机,将A机生成的公钥复制到本机的 ~/.ssh/authorized_keys 文件中。同样将 SSH 主机密钥追加到 known_hosts 文件中。

4.A机登录B机。

想让A,B机无密码互登录,那B机以上面同样的方式配置即可。

SSH 主机密钥/公钥/指纹

免密登录一节涉及 SSH 主机密钥 和 SSH 公钥。

区别如下:

关键点SSH 主机密钥SSH 公钥
用途用于验证服务器(主机)的身份用于用户身份验证(客户端验证)
生成地点由服务器生成,存储在服务器上由用户生成,存储在客户端和服务器的 authorized_keys
类型一对密钥:公钥和私钥(通常是 RSA、DSA、ECDSA 或 Ed25519)一对密钥:公钥和私钥(通常是 RSA、DSA、ECDSA 或 Ed25519)
公钥存储位置服务器上的 /etc/ssh/ 或类似目录用户的 ~/.ssh/authorized_keys 文件
作用用于服务器验证客户端是否连接到正确的服务器用于验证用户是否具有访问权限

计算 SSH 主机密钥指纹

从 SSH 私钥 提取公钥

别名、连接配置

跳过交互模式(不推荐)

解决方法:

或者在使用ssh连接远程主机时加上 -o StrictHostKeyChecking=no 的选项,如下:

用OpenSSH的人都知道ssh会把你每个你访问过计算机的公钥(public key)都记录在~/.ssh/known_hosts。当下次访问相同计算机时,OpenSSH会核对公钥。如果公钥不同,OpenSSH会发出警告,避免你受到DNS Hijack之类的攻击。 SSH对主机的public_key的检查等级是根据StrictHostKeyChecking变量来配置的。默认情况下,StrictHostKeyChecking=ask。简单说下它的三种配置值:

  1. StrictHostKeyChecking=no 最不安全的级别,当然也没有那么多烦人的提示了,相对安全的内网测试时建议使用。 如果连接server的key在本地不存在,那么就自动添加到文件中(默认是known_hosts),并且给出一个警告。
  2. StrictHostKeyChecking=ask 默认的级别,就是出现刚才的提示了。如果连接和key不匹配,给出提示,并拒绝登录。
  3. StrictHostKeyChecking=yes 最安全的级别,如果连接与key不匹配,就拒绝连接,不会提示详细信息。

跳过GSSAPI认证

原因排查,以ssh -v调试模式远程登录

解决方法:修改服务器配置

解决方法:修改客户端配置 原来是因为尝试了个没有意义而且会失败的 gssapi-with-mic 认证方式浪费了时间,打开客户端的/etc/ssh/ssh_config 把里面的 GSSAPIAuthentication yes 改成 no 关掉它,即可让 ssh 直接尝试美妙的 publickey 认证方式。

或者在使用ssh连接远程主机时加上 -o GSSAPIAuthentication=no 的选项,如下:

另一个问题

解决方法

这可能是D-Busandsystemd导致的问题。如果dbus由于某种原因服务重新启动,也需要重新启动systemd-logind 可以通过打开 ssh 守护程序日志(在 Ubuntu 上它应该是)来检查这是否是问题/var/log/auth.log并检查它是否有这些行:

如果是,只需重新启动systemd-logind服务:

我在 CentOS 7 上遇到了同样的问题,因为它messagebus被重新启动了(这是D-Bus在 CentOS 上调用服务的方式)。

本地端口转发

将本地端口的数据通过远程服务器转发到第三方服务器

远程端口转发

实现远程服务器通过ssh登录本地PC的功能

什么是ssh反向连接? 反向连接是指主机A(受控端)主动连接主机B(控制端),在主机A和主机B之间建立一个远程连接,通过这个连接主机B可以主动的向主机A发送一些请求。

应用场景 1、平时我们登录远程服务器,一般使用ssh登录远程服务器 2、现在我们想通过远程服务器反向操作登录本地PC,但由于一般本地PC没有公网IP,导致远程服务器使用正常ssh命令无法登录PC,这个时候就需要使用ssh反向连接功能。

操作步骤 主机A执行命令与服务器建立连接

3、主机B(服务器)执行命令远程登录主机A:

Windows 安装 OpenSSH Server

github

添加环境系统变量

SecureCRT

记录日志

勾选 Start log upon connec

WinSCP

普通用户登录并切换到root

先登录ssh,查看sftp-server执行文件目录: cat /etc/ssh/sshd_config|grep sftp

此时返回sftp-server执行文件目录可能是: Subsystem sftp /usr/libexec/openssh/sftp-server

然后在winscp的高级设置中的SFTP选项中设置中填入sftp-server执行文件目录: sudo /usr/libexec/openssh/sftp-server

接着在Shell中填入切换root用户的命令: sudo -i

好了,保存,再次登录,就是root账号登录了。

xsehll

Xshell 4 注册码: 690313-111999-999313

Xftp 4 注册码:101210-450789-147200

Xmanager注册码:101210-450789-147200

Xshell 4配置文件路径: %HOMEPATH%\AppData\Roaming\NetSarang\Xshell\Sessions

Xshell 5配置文件路径: %HOMEPATH%\Documents\NetSarang\Xshell\Sessions

putty

PuTTY 的主机密钥指纹存储在 Windows 系统的注册表中。具体位置是:

其他

windows ssh_key_权限

windows端通过ssh工具远程连接linux服务器时出现“permissions are too open”的错误

ssh_key_权限.bat

现在就可以使用下面的脚本登录服务器了。