使用SSHFS在Debian Squeeze上安装远程目录
本教程将介绍如何使用SSHFS从本地服务器上的远程服务器安装目录。 SSHFS( S ecure SH ell F ile S ystem)是通过SSH安全地提供文件/目录的文件系统,本地用户可以像使用本地文件/目录一样使用它们。 在本地计算机上,通过FUSE(用户空间中的文件系统)安装远程共享。 我将为本地和远程服务器使用Debian Squeeze。
我不会保证这将为您工作!
1初步说明
我在本教程中使用以下两个系统:
- 本地系统:
server1.example.com
,IP地址:192.168.0.100
- 远程系统:
server2.example.com
,IP地址:192.168.0.101
我将显示如何使用SSHFS作为root用户,也可以作为普通用户使用。
2安装SSHFS
server1:
在本地系统上,必须按如下方式安装SSHFS:
apt-get install sshfs
之后,确保加载了保险丝
内核模块:
lsmod | grep fuse
root@server1:~# lsmod | grep fuse
fuse 50625 1
root@server1:~#
3使用SSHFS作为根
server1:
现在我想将远程目录/ home / backup
(在server2
上由server2
的root用户拥有)挂载到本地/备份
目录下,作为本地root用户。
首先加入保险丝
组的根:
adduser root fuse
创建本地/备份
目录,并确保它由root拥有(应该是以root身份运行这些命令):
mkdir /backup
chown root /backup
然后将remote / home / backup
目录挂载到/ backup
:
sshfs -o idmap=user root@192.168.0.101:/home/backup /backup
(您可以使用远程系统的完整路径,如上所述,或相对路径,如下所示:
sshfs -o idmap=user root@192.168.0.101:backup /backup
如果使用相对路径,该路径是相对于远程用户的主目录,因此在这种情况下,它将是/ root / backup
。 你甚至可以省略远程目录,如下所示:
sshfs -o idmap=user root@192.168.0.101: /backup
在这种情况下,这将转换为远程用户的主目录 - / root
。
)
-o idmap = user
使得本地和远程系统使用不同的用户ID无关紧要 - 远程用户拥有的文件也由本地用户拥有。 如果您不使用此功能,您可能会收到权限问题。
如果第一次连接到远程主机,您将看到有关远程主机的真实性的警告(如果您在使用ssh或scp之前已连接到远程主机,则不会看到警告)。 在任何情况下,将要求您提供server2
的根密码:
root @ server1:〜#sshfs -o idmap = user root@192.168.0.101:/ home / backup / backup
主机'192.168.0.101(192.168.0.101)'的真实性无法建立。
RSA钥匙指纹为25:d8:7a:ee:c2:4b:1d:92:a7:3d:16:26:95:56:62:4e。
您确定要继续连接(是/否)?
< - 是的
root@192.168.0.101的密码:
< - server2_root_password
root @ server1:〜#
我们来检查远程目录是挂载到/ backup
:
mount
root@server1:~# mount
/dev/sda1 on / type ext3 (rw,errors=remount-ro)
tmpfs on /lib/init/rw type tmpfs (rw,nosuid,mode=0755)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
udev on /dev type tmpfs (rw,mode=0755)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=620)
fusectl on /sys/fs/fuse/connections type fusectl (rw)
root@192.168.0.101:/home/backup on /backup type fuse.sshfs (rw,nosuid,nodev,max_read=65536)
root@server1:~#
df -h
root@server1:~# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 29G 1.2G 26G 5% /
tmpfs 249M 0 249M 0% /lib/init/rw
udev 244M 100K 244M 1% /dev
tmpfs 249M 0 249M 0% /dev/shm
root@192.168.0.101:/home/backup
29G 1.2G 27G 5% /backup
root@server1:~#
看起来不错!
要卸载共享,运行
fusermount -u /backup
3.1创建私有/公钥对在server1上
当然,我们不想在每次尝试安装远程共享时输入密码。 因此,我们创建一个私钥/公钥对,并将公钥传输到server2
,以便我们不再需要输入密码。
server1:
在server1.example.com
上创建私钥/公钥对:
ssh-keygen
root @ server1:〜#ssh-keygen
生成公共/私有rsa密钥对。
输入要保存密钥的文件(/root/.ssh/id_rsa):
< - ENTER
输入密码(无密码为空):
< - ENTER
再次输入相同的密码:
< - ENTER
您的身份已保存在/root/.ssh/id_rsa中。
您的公钥已保存在/root/.ssh/id_rsa.pub中。
关键指纹是:
b4:22:48:21:99:72:65:3e:1d:93:6f:9a:5c:5f:70:61 root@server1.example.com
关键的randomart形象是:
+ - [RSA 2048] ---- +
| .o..o o
E. |
| + .. + ..o ... |
| ... o ... o |
|
。
。
。
。+。
。
|
|
。
... = S。
。
|
|
。+。
。
|
|
|
|
|
|
|
+ ----------------- +
root @ server1:〜#
重要的是,您不要输入密码,否则在没有人工交互的情况下安装将无法正常工作,因此只需按ENTER键
!
接下来,我们将公钥复制到server2.example.com
:
ssh-copy-id -i $HOME/.ssh/id_rsa.pub root@192.168.0.101
现在检查server2的
server1
的公钥是否正确传输:
server2:
cat $HOME/.ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDVdvyYlzgTkjZhDK8S+EZ1fVU/lvLlayKya/u+NY9w6WerYlCxX6nMN9beTXddmlTXg6uXGYAEEnFA36JlOcXz0cr7D8KEzW1vwRtZFJzZ/oH71aDKgrY7M4yRaCsKdElrF+pbq1JT84pEmlOKluVlqGSGvn1Y0W/vrDgl9/j852tkqqIwUg+RjxRbxf13IwWhNOrIiNAFnxhKT9kMVXl9m5Gv5EYk130JNC/uSKTo8uxk5Z+Rq4m7vaIqx0hk8zfLodZ5h4vDnUpwjIhEH+L+3OogeC5bm4zbAYTf4L/5dfobuSsWF88kO/6jAurKmoHShSA5n1YyJoE6ODAgvbpb root@server1.example.com |
现在回到server1上
,尝试再次挂载远程共享(确保在运行命令之前卸载它):
server1:
sshfs -o idmap=user root@192.168.0.101:/home/backup /backup
如果一切顺利,您不应该被提示输入密码:
root@server1:~# sshfs -o idmap=user root@192.168.0.101:/home/backup /backup
root@server1:~#
3.2在引导时自动安装远程共享
server1:
如果您不想手动装载远程共享,则可能会在系统引导时自动挂载(如果您遵循第3.1章,否则将无法自动挂接,因为您将被要求输入密码)。 通常,我们将修改/ etc / fstab
来实现这一点,但是不幸的是,在引导过程中处理/ etc / fstab
时,网络尚未启动,这意味着无法挂载远程共享。
为了规避这一点,我们只需要将mount命令添加到/etc/rc.local
,这是在引导过程中要处理的最后一个文件,当时网络已经启动并运行:
vi /etc/rc.local
#!/bin/sh -e # # rc.local # # This script is executed at the end of each multiuser runlevel. # Make sure that the script will "exit 0" on success or any other # value on error. # # In order to enable or disable this script just change the execution # bits. # # By default this script does nothing. /usr/bin/sshfs -o idmap=user root@192.168.0.101:/home/backup /backup exit 0 |
您可以通过简单地重新启动系统来测试它:
reboot
重新启动后,您可以检查
mount
和
df -h
如果远程共享挂载。