25
2025
03
20:31:31

ssh免密连接服务器和服务器磁盘挂载到本地的方法

本文首先介绍什么是SSH,然后介绍如何使用SSH免密连接远程服务器(也叫远程主机,下文不再区分),最后介绍如何将远程服务器的磁盘挂载到本地,从而实现像访问本地磁盘一样访问远程主机的磁盘。

一、SSH简单介绍

SSH(Secure Shell)是一种流行的网络安全协议,用于通过互联网安全地访问远程系统。它通过加密和认证机制实现安全的访问和文件传输等业务。
传统的互联网通信(如Telnet、FTP等)使用明文传输数据,内容一旦被截获就会完全暴露,存在很多安全隐患。SSH协议通过对网络数据进行加密和验证,建立SSH客户端和SSH服务器之间的安全隧道,在不安全的网络环境中为网络服务提供了安全的传输通道。
图片
SSH协议目前存在SSH1.0和SSH2.0版本,其中SSH2.0是在1.x版本的基础上做了扩展,从而可以支持更多的认证方法和密钥交换方式,同时提高了服务能力。
因此,现在常用SSH实现与远程服务器通信,从而实现对远程服务器的管理和控制。
二、SSH免密连接服务器
通常情况下我们可以这样来连接远程服务器:

ssh [选项] 远程服务器用户名@主机名
上述“选项”部分可有可无,主机名通常是远程服务器的公网IP地址。
首次连接通常会被询问是否要连接未知主机,当输入“yes”后自动将远程主机添加到已知主机(known hosts)列表中。
图片
随后就是让我们输入登录密码。
这种方法的缺点是当我们断开远程主机的连接,下一次再登录时仍然需要我们输入密码,尤其是当我们使用scp命令在本地和远程主机之间来回拷贝文件时会发现尤其繁琐,因为每次都要输入一遍密码。
如何免密连接和拷贝文件呢?
方法就是使用一对密钥对来实现。将本地机器的公钥拷贝到远程主机,这样每次连接远程主机或与远程主机互相拷贝文件就不用再输入密码了,远程服务器端会自动校验客户端的权限。
在本地生成密钥对,指令如下:

ssh-keygen -t rsa -C "my_notebook"
其中“-C”参数可有可无,然后连续回车几次就可以了。
此时在“$HOME”目录(可通过“echo $HOME”命令查看)下的“.ssh”文件夹下会有“id_rsa”(私钥)和“id_rsa.pub”(公钥)两个文件,我们只需将公钥文件“id_rsa.pub”发送到远程主机,之后就可以实现免密了。
在“.ssh”目录下时,将本地主机的公钥上传到远程主机,指令如下:

ssh-copy-id 远程服务器用户名@主机名
如果不在“.ssh”目录下,那么可以这样执行:

ssh-copy-id -i /home/john/.ssh/id_rsa.pub 远程服务器用户名@主机名
如何确认是否成功呢?方法是查看远程主机的“.ssh”目录下是否有authorized_keys文件,且该文件中包含了“id_rsa.pub”中的内容。当然,最直截了当的方法就是再执行一遍ssh登录,如果不需要输入密码就可以成功连接远程主机,说明前面的操作就成功了。
如果每次连接远程主机或向远程主机拷贝文件都需要输入“远程服务器用户名@主机名”(如john@172.81.8.36),这还是比较麻烦,有没有更快捷的方法呢?
我们可以在本地主机给远程主机起个别名(比如叫remote1),那么当我们要连接远程主机时,可以直接ssh remote1,这样就直接连上了。如何做呢?
我们只需在本地主机的“.ssh”目录下创建一个config文件,然后添加以下内容:



host remote1  hostname 172.81.8.36  user john
其中,host后面跟的是远程主机别名,建议英文,通常符合编程语言的变量命名规则即可,hostname后面跟的是远程主机的IP地址,user后面跟的是远程主机名。
图片
这样操作完成后,相当于我们为远程主机起了一个别名,后面无论是连接远程主机,还是向远程主机拷贝文件或从远程主机向本地拷贝文件都可以使用该别名,且不需要输入任何密码,就可以实现信息的加密传输。
三、服务器磁盘挂载到本地
如果想访问远程主机的某个目录下的所有文件(可能数量很大),我们可以将其从远程主机拷贝到本地以便随时访问,但这样做会占用本地大量的磁盘空间,且拷贝也需要花费很多时间。有没有更便宜的方法?
使用sshfs(SSH Filesystem)将远程主机的目录挂载到本地以便随时访问。
安装sshfs:


sudo apt updatesudo apt install sshfs
使用sshfs挂载远程主机目录到本地:
首先是在本地机器上创建一个空目录,通过访问该目录就可以访问远程主机上的目录内文件。比如我们在“$HOME”目录下创建一个mnt_remote文件夹。


cd ~mkdir mnt_remote
然后挂载远程主机目录到mnt_remote目录下:

sudo sshfs -o allow_other,default_permissions john@172.81.8.36:/home/john/data  ~/mnt_remote
上面-o后跟的参数的含义如下:

  • allow_other:允许其他用户对该挂载目录也有访问权限,也能够像访问普通目录一样访问它。
  • default_permissions:它是fuse(Filesystem in Userspace,用户空间文件系统)的一个选项,而不是sshfs特有的选项。添加这个选项后,文件的访问控制会强制基于file mode,即不会把remote的uid(用户ID)、gid(组ID)映射到本地。如果没有添加这个选项,文件的访问控制则会依赖于fuse的默认行为或其他相关设置。

上述挂载操作成功后,就可以在本地主机像访问普通目录一样访问远程主机目录,比如在里面创建文件,往里面拷贝文件,给文件重命名等,这些操作都会反映在远程主机的目录里。
sshfs是基于SSH的一个工具,用于挂载远端的文件系统到本地。需要注意的是,该操作仅为当前会话挂载远程磁盘。如果远程服务器或本地机器关机或重新启动,则需要再次挂载它才能使用。
四、总结
ssh是开发者经常使用的安全通信协议,无论是在git克隆代码,还是连接远程服务器或拷贝文件,它都是一个非常便利的工具。掌握一些trick,可以让我们的开发效率得到大大提升。同时也要特别提醒的是,注意保护好自己的私钥(id_rsa)文件。




推荐本站淘宝优惠价购买喜欢的宝贝:

image.png

本文链接:https://hqyman.cn/post/9754.html 非本站原创文章欢迎转载,原创文章需保留本站地址!

分享到:
打赏





休息一下~~


« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

请先 登录 再评论,若不是会员请先 注册

您的IP地址是: