SSH登录详解

发布时间:2023-05-20

一、SSH简介

SSH(Secure Shell)是一种网络协议,用来在不安全的网络中安全地传输数据。SSH服务器允许用户通过SSH协议对它进行登录和操作。 SSH协议将网络中的所有通信都进行了加密。这意味着即使别人能够在网络上截获你的数据,他们也无法读取数据的内容。此外,SSH还使用了安全隧道,可以将其他协议(如FTP和VNC)通过SSH连接转换成加密协议。 使用SSH协议的最大好处就是:你不需要在不信任的网络中担心网络攻击,因为你的数据都是加密的。

二、SSH登录

SSH登录是远程连接到目标服务器执行命令的最基本方式。下面是一个基础的SSH登录示例:

ssh username@hostname

其中,username是你的用户名,hostname是目标服务器的主机名或IP地址。当你在本地运行这个命令时,你将要连接到hostname服务器,并使用username作为登录用户名。在连接过程中,你需要输入你的密码才能登录成功。 SSH连接可以使用多种方式进行身份验证,常见的有以下几种:

三、SSH密钥

SSH密钥是SSH连接时进行身份验证的一种方式。它是一个由两个文件组成的密钥对:私钥和公钥。 私钥需要保存在本地电脑上,而公钥则需要上传到服务器上。当熟知私钥的用户试图连接到服务器时,服务器将会请求他传送一些数据。这些数据将会被用公钥解密,以便服务器确认客户端的身份。 可以使用下面的命令生成一个SSH密钥:

ssh-keygen -t rsa -b 2048

接下来将会提示你输入存储密钥的文件名和密码。一般来说,只需要按回车默认即可。 生成公钥之后,使用下面的命令在服务器上将公钥添加到你的SSH用户中:

echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDfhdJNYNTo0...[your key content]...MN0qv" >> ~/.ssh/authorized_keys

将公钥添加到你的SSH用户后,你就可以使用私钥安全地连接到这个服务器上。

四、SSH代理

SSH代理是一种SSH连接的扩展,它可以让你在远程服务器之间进行无缝连接。当你需要连接到不同的服务器时,你不需要每次都重新连接到每个服务器上,而是可以通过代理服务器来连接到不同的服务器上。 在本地电脑上,先使用下面的命令创建代理连接:

ssh -D 8000 username@hostname

然后你就可以使用这个代理来在远程服务器之间连接:

ssh -o ProxyCommand='nc -x localhost:8000 %h %p' username2@hostname2

此命令将通过代理连接到hostname2服务器,并使用username2作为登录用户名。

五、SSH跳板机

SSH跳板机也称为SSH跳跃,它是一种限制性防火墙或运维安全限制的情况下,通过跳板机访问内部服务器的方法。SSH跳板机工作的原理是在跳板机上建立一个隧道,把内部主机的端口连接到外网的端口上。 使用下面的命令进行SSH跳板机连接:

ssh -t username@hostname ssh username@internalhostname

这个命令将首先连接到跳板机上,然后通过跳板机连接到youserver2上。

六、SSH文件传输

使用scp命令可以在本地电脑和SSH服务器之间安全地传输文件。 将本地文件传输到SSH服务器:

scp /path/to/local/filename username@hostname:/path/to/remote/

从SSH服务器传输文件到本地电脑:

scp username@hostname:/path/to/remote/filename /path/to/local/

七、SSH端口转发

SSH端口转发是一种在不同网络环境之间访问网络资源的安全方法。它利用SSH的安全通道来连接到跨越两个不同网络的计算机。 使用下面的命令在localhost上将remotehost:3306的端口转发到本地的3306端口:

ssh -L 3306:localhost:3306 username@remotehost

完成转发后,你就可以使用localhost的3306端口连接到remotehost的3306端口了。

八、SSH隧道

SSH隧道是一种通过SSH连接到远程服务器上的服务,并将其转发到本地电脑上的方法。通常,SSH隧道用于连接到远程服务器上的数据库或其他网络资源。 打开MySQL隧道,将remotehost服务器的3306端口连接到本地电脑的3306端口:

ssh -L 3306:localhost:3306 username@remotehost -N

连接完成后,你可以从本地电脑上连接到MySQL数据库了。