本文分享自华为云社区《ssh远程连接方式总结云社区华为云》,作者:嵌入式视觉。 SSH(安全外壳协议SecureShellProtocol,简称SSH)是一种加密的网络传输协议,用于在网络中实现客户端和服务端的连接,典型的如我们在本地电脑通过SSH连接远程服务器,从而做开发,Windows、macOS、Linux都有自带的SSH客户端,但是在Windows上使用SSH客户端的体验并不是很好,所以我们一般使用Xshell来代替。一,准备工作1。1,安装SSH客户端 为了建立SSH远程连接,需要两个组件:客户端和相应服务端组件,SSH客户端是我们安装在本地电脑的软件;而服务端,也需有一个称为SSH守护程序的组件,它不断地侦听特定的TCPIP端口以获取可能的客户端连接请求。一旦客户端发起连接,SSH守护进程将以软件和它支持的协议版本作为响应,两者将交换它们的标识数据。如果提供的凭据正确,SSH会为适当的环境创建一个新会话。 MacOS系统自带SSH客户端,可以直接使用,Windows系统需要安装Xshell客户端软件,大部分Linux发行版系统都自带SSH客户端,可以直接使用,可通过sshV命令查看当前系统是否有SSH客户端。〔rootVM02centos〕sshVOpenSSH7。4p1,OpenSSL1。0。2kfips26Jan20171。2,安装SSH服务端 Linux系统检查ssh服务端是否可用的命令有好几种,比如直接看是否有ssh进程在运行:psefgrepssh 运行以上后,输出结果示例如下,有sshd进程在运行,说明ssh服务端可用。bash4。3psegrepssh336?00:00:00sshd358?00:00:00sshd1202?00:00:00sshd1978?00:00:00sshd1980?00:00:00sshd2710?00:00:00sshd2744?00:00:00sshd2829?00:00:00sshd2831?00:00:00sshd9864?00:00:00sshd9893?00:00:02sshd 对于Ubuntu系统,可通过以下命令检查OpenSSH服务端软件是否可用:sshlocalhost不同Linux系统输出可能不一样二,基于密码的登录连接 典型用法,只需输入以下命令即可连接远程服务器。ssh连接默认端口是22,如果本地机用户名和远程机用户名一致,可以省略用户名sshusernamehost也可以指定连接端口sshpportuserhost 上述命令是典型的SSH连接远程服务器的命令,如果是第一次连接运行后会得到以下提示,正常输入yes,然后输入账号密码即可连接成功:Theauthenticityofhost81。69。58。141(81。69。58。141)cantbeestablished。ED25519keyfingerprintisSHA256:QW5nscbIadeqedp7ByOSUFZ45rxWGYJvAs3TTmTb0M。ThiskeyisnotknownbyanyothernamesAreyousureyouwanttocontinueconnecting(yesno〔fingerprint〕)?yesLastlogin:TueFeb2815:33:062023fromxx。xx。xx。xx三,基于公钥登录连接 前面的命令是通过密码(私钥)登录,这样比较麻烦,因为每次登录我们都需要输入密码,因此我们可以选择SSH的公钥登录连接方式,省去输入密码的步骤。 公钥登录的原理,是先在本地机器上生成一对公钥和私钥,然后手动把公钥上传到远程服务器。这样每次登录时,远程主机会向用户发送一段随机字符串,而用户会用自己的私钥对这段随机字符串进行加密,然后把加密后的字符串发送给远程主机,远程主机会用用户的公钥对这段字符串进行解密,如果解密后的字符串和远程主机发送的随机字符串一致,那么就认为用户是合法的,允许登录。 只需要把私钥传给远程服务器,远程服务器就可以验证私钥是否是对应的公钥,如果是就允许登录,这样就不需要输入密码了。 SSH支持多种用于身份验证密钥的公钥算法,包括RSA、DSA、ECDSA和ED25519等,其中RSA算法是最常用的,因为它是SSH协议的默认算法,所以我们这里以RSA算法为例来生成密钥,并配置免密码远程连接。 sshkeygen是为SSH创建新的身份验证密钥对的工具。此类密钥对用于自动登录、单点登录和验证主机,常用参数定义如下:t参数指定密钥类型b参数指定密钥长度 基于公钥登录连接的具体步骤如下: 1,本地终端运行sshkeygentrsab4096命令生成密钥对,运行后会提示输入密钥保存路径,直接回车即可,保存在默认路径下,然后会提示输入密钥密码,这里我们不设置密码,直接回车即可,然后会提示再次输入密码,这里也不设置密码,直接回车即可,最后会提示密钥生成成功,如下图所示,可以看出。ssh目录下,会新生成两个文件:idrsa。pub和idrsa,分别是公钥和私钥文件。 2,将本地。ssh目录下的idrsa。pub文件内容添加到目标服务器的。sshauthorizedkeys文件中,如果目标服务器没有。ssh目录,需要先创建。ssh目录,然后再创建authorizedkeys文件,然后再添加文件内容。 具体操作命令如下:1,本地终端运行命令cat。sshidrsa。pub查看本地公钥文件内容,并复制2,远程终端运行命令,有authorizedkeys文件则跳过mkdirp。ssh创建。ssh目录touch。sshauthorizedkeys创建authorizedkeys文件3,然后将本地公钥文件内容粘贴到authorizedkeys文件中,保存退出 如果觉得上述步骤太过繁琐,可通过下面命令,一键完成公钥登录连接的配置:sshusernamehostmkdirp。sshcat。sshauthorizedkeys。sshidrsa。pub 只要将公钥文件内容写入远程服务器的authorizedkeys的文件,公钥登录的设置就完成了,后续远程连接就不用每次输入密码了! Github提交代码的时候,也是通过公钥登录连接的方式,只要将本地的公钥文件内容添加到github的authorizedkeys文件中,就可以免密码提交代码了,原理是一模一样的。四,VSCode远程连接 VSCode也支持远程连接,可以通过RemoteSSH插件来实现,具体操作步骤如下: 1,在VSCode中安装RemoteSSH插件。 2,windows系统ctrelshiftp命令打开命令面板,输入RemoteSSH:ConnecttoHost。。。,然后选择SSHConfiguration,或者通过左侧菜单栏的RemoteExplorerSSHTargetsSSHConfiguration进入。如下图所示: 3,然后会打开。sshconfig配置文件,可以参考如下所示模板进行配置:ReadmoreaboutSSHconfigfiles:https:linux。die。netman5sshconfigHostJumpMachineHostNamejumpvscode。sensetime。com你跳板机的用户名UserusernameHostT4目标机的ip地址HostNamexxx。xxx。xxx。xxx你目标机的用户名Userusername目标机登录端口Port22macos系统:ProxyCommandsshqWh:pJumpMachineProxyCommandsshqWh:pJumpMachine 4,本地机生产公钥并追加到远程服务器authorizedkeys中的步骤,参考第三章。 5,配置完成后,保存退出,然后在VSCode中,点击左侧菜单栏的RemoteExplorerSSHTargetsT4,即可连接到远程服务器。参考资料维基百科SecureShellHowtoUsesshkeygentoGenerateaNewSSHKey?SSH原理与运用(一):远程登录 关注华为云开发者联盟点击下方,第一时间了解华为云新鲜技术 华为云博客大数据博客AI博客云计算博客开发者中心华为云