ssh
当使用 Telnet 等服务进行传输数据等信息时,其本身就存在漏洞,且其使用明文形式进行信息的传输,因此存在很大的安全隐患。
这些传输中的数据只要使用某些工具就可以解惑并很容易知道其中的内容
在考虑数据传输安全的情况下,芬兰的一家公司开发出一种加密的通信协议,即 Secure Shell(SSH),SSH 的出现,很大程度上避免了被所谓的中间人攻击的威胁。
SSH 协议由传输协议、用户认证协议和连接协议三个部分组成。
但由于版权和加密算法的限制,因此更多的人选择使用 OpenSSH 协议来代替。
所谓的 OpenSSH,即开源的 SSH,它是 SSH 的替代品。
当 OpenSSH 第一次启动时,其先建立一条经加密的连接通道,之后要求用户输入认证信息,当认证通过后就可以使用此通道进行信息的传输。
端口转发
服务器端口转发 ssh -L 6379:localhost:6379 xxx(服务器ip地址)
端口转发时,要保证本地不要使用相同的端口
例如,转发远程服务器的 3306 端口到本地的 3307
在本地执行:
1 |
|
OpenSSH 远程登录
当使用 SSH 远程进行登录时,在未使用选项的情况下,其默认连接到当前登录本机的用户。
如当前是 scat 用户登录,当使用未带选项的 ssh 登录时,将连接到 scat 用户的远程主机上。
假设当前是 root 用户登录系统,而其为第一次使用该服务。
在使用不带选项的 ssh 连接时,会产生一些警告性的提示信息,提示该主机的 RSA 密钥还没有创建,并询问用户是否要继续连接(如需要断开连接,可使用 exit 命令)
1 2 3 4 5 6 7 8 |
|
OpenSSH 配置管理
在远程主机认证密钥之后,把此密钥添加到本机的已知主机列表文件中,此文件位于主目录下一个隐藏的目录下,此隐藏目录名为.ssh
1 |
|
在 SSH 安装服务之后,系统将为其在/etc
目录下创建一个名为 ssh 的目录。
在 ssh 目录下创建多个配置文件,每个文件都有不同的功能
1 2 3 4 5 6 7 8 |
|
- moduli: 该文件服务器端和客户端都有,moduli 包含连接时需要的密钥交换信息,OpenSSH 就是利用这些信息进行连接的。
- ssh_config: 该文件属于全局的客户端配置文件
- sshd_config: 该文件服务器端配置文件
- ssh_host_dsa_key 和 ssh_host_dsa_key.pub: ssh_host_dsa_key 是私有文件,只有拥有者才拥有读写权,而 ssh_host_dsa_key.pub 为公开文件,其他人可对此文件的内容进行读取。
- ssh_host_key 和 ssh_host_key.pub: 这两个文件存放远程连接时所需要的验证信息,若输入的验证信息与这两个文件的内容不同,则拒绝连接。
- ssh_host_rsa_key 和 ssh_host_rsa_key.pub: ssh_host_rsa_key 是私有文件,只有拥有者才拥有读写权,而对于公开的 ssh_host_rsa_key.pub 文件,其他人都可对此文件的内容进行读取。
在默认情况下,ssh 是运行 root 进行登录的,为了避免 root 密码被监听并泄漏的可能,尽量不要使用 root 进行远程登录。
要是可以,可通过配置 sshd_config 文件来拒绝 root 登录
命令使用
命令语法:ssh [选项] [用户@][主机][命令]
选项 | 含义 |
---|---|
-1 | 强制使用 SSH v1 协议 |
-2 | 强制使用 SSH v2 协议 |
-4 | 强制只使用 IPv4 地址 |
-6 | 强制只使用 IPv6 地址 |
-p <端口号> | 指定连接到远程主机的端口号 |
-l <登录名> | 指定登录到远程主机的用户名 |
-q | 安静模式 |
-f | 在命令执行之前请求 ssh 去后台 |
-v | 详细模式 |
-N | 不执行远程命令 |
-F <配置文件> | 指定一个替代每个用户的配置文件 |
-g | 允许远程主机连接到本地的转发端口 |
-W <主机:端口号> | 要求将在客户单上的标准输入和输出转发到指定主机上通过安全通道的端口 |
-L <绑定地址:>端口号:主机:主机端口 | 指定本地(客户端)主机上的特定端口将被转发到远程端指定的主机和端口上 |
-R <绑定地址:>端口号:主机:主机端口 | 指定本地(服务器)主机上的特定端口将被转发到本地端指定的主机和端口上 |
-D <绑定地址>:端口 | 指定本地动态应用程序级的端口转发 |
-b <绑定地址> | 在本地计算机上使用指定绑定地址作为连接的源地址 |
本地执行远程 linux 命令
ssh -t nocilantro < update_server.sh