2. Samba共享访问配置¶
Note
有时需要在在Windows和Linux之间传输文件,可以通过Samba共享实现。 实例尝试在windows下访问Linux中文件,通过在Linux配置samba, smb用户名/密码为smbuser1:123456.共享访问目录为/smbshare
2.1. samba安装和配置¶
一. samba的安装
sudo apt-get install samba
二. 创建共享目录
mkdir /smbshare
chmod 777 /smbshare –R
三. 创建Samba配置文件
- 保存现有的配置文件
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
- 修改现配置文件
sudo vi /etc/samba/smb.conf
在smb.conf最后添加
security = user
username map = /etc/samba/users
[smbshare]
path=/smbshare
available=yes
browseable=yes
public=yes
valid users = smbuser1
writeable=yes
四. 创建samba帐户
sudo touch /etc/samba/smbpasswd
smbpasswd -a smbuser1
然后会要求你输入samba帐户的密码
Note
- ps1:如果没有第四步,当你登录时会提示
session setup failed: NT_STATUS_LOGON_FAILURE
- ps2:如果提示
Failed to add entry for user
,则表示没有对应的用户。 需要先增加一个系统用户smbuser1(增加一个和samba用户名一样的系统用户)。 命令如下:useradd smbuser1
五. 重启samba服务器
sudo /etc/init.d/samba restart
六. 测试
smbclient -L //localhost/share
七. 使用
可以到windows下输入ip使用了,在文件夹处输入 “" + “Ubuntu机器的ip或主机名” + “" + “smbshare” 提示输入认证时:用户名为smbuser1,密码为增加smb用户smbuser1时输入的密码。
2.2. 自动化脚本¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | #!/bin/bash
set -x
apt-get install samba
if [ ! -d /smbshare ];then
mkdir /smbshare
fi
chmod 777 /smbshare
if [ ! -e /etc/samba/smb.conf.bak ];then
cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
fi
if grep -Fxq "# add by chenshiqiang" /etc/samba/smb.conf; then
:
else
cat << EOF >> /etc/samba/smb.conf
# add by chenshiqiang
security = user
username map = /etc/samba/users
[smbshare]
path=/smbshare
available=yes
browseable=yes
public=yes
valid users = smbuser1
writeable=yes
EOF
fi
touch /etc/samba/smbpasswd
useradd smbuser1
smbpasswd -a smbuser1
cd /smbshare/
/etc/init.d/samba restart
|
2.3. mount共享¶
有时因为公司网络访问限制,不允许访问外网,那么samba无法安装,也就无法共享了。 此时可以退而求其次,通过mount命令,在windows宿主机和vmware中的Linux虚机进行文件共享!
首先,在windows宿主机中创建一个共享文件夹。设置方式为属性-共享-everyone读取/写入;
在Linux虚机中创建一个目录 mkdir /winshare
执行挂载命令:
#mount -t cifs //<win-host-ip>/share /winshare -o username=<win-user-name>,rw mount -t cifs //10.11.113.75/share /winshare -o username=cec,rw
其中share是windows共享文件夹,注意该文件夹要进行共享设置,最好不用密码进行操作! 挂载后,将要共享的文件夹拷贝到该目录,则宿主机和虚拟机都可以进行查看!
需要注意如下几点:
如果挂载过程出现
mount: block device //xxx is write-protected, mounting read-only
错误, 则需要安装cits组件。使用安装即可!apt-cache search cifs | grep -i cifs apt-get install cifs-utils
特别注意:挂载在Linux下的挂载目录,挂载成功后,目录下所有东西都将被清空! 这里cifs是一种网络文件系统!可以google获取相关知识。
Note
更新:2017-09-19
最近因为在某个场景,有挂载需求,结果怎么都挂载不上。google查找了很多资料, 说可能是smb协议版本的问题,按照google结果,怎么操作都不可行。
后来,和同事说起这个问题,他试了下,然后发现是windows防火墙的原因。因此, 遇到类似网络问题,我们需要先检测端口是不是正常,由于cifs协议使用的是139和445端口, 我们可以使用命令探测windows主机是不是开放了这些端口。
root@ubuntu:/smbshare/clog# nc -v -w 1 10.11.111.47 -z 445
nc: connect to 10.11.111.47 port 445 (tcp) failed: Connection refused
root@ubuntu:/smbshare/clog#
root@ubuntu:/smbshare/clog# nc -v -w 1 10.11.111.47 -z 139
Connection to 10.11.111.47 139 port [tcp/netbios-ssn] succeeded!
root@ubuntu:/smbshare/clog# nc -v -w 1 10.11.111.47 -z 1-1000
假如发现端口没有开放,考虑关闭windows防火墙,再试一试上述命令
2.4. kvm宿主机和虚机文件共享¶
之所以有这个需求,是由于某次大数据集群环境搭建中,通过在OpenStack云环境中, 开启多个虚机,然后安装spark等软件并配置。假如在虚机中依次安装spark等软件,那真的很费时间, 因此,可以通过制作一个qemu/kvm制作一个镜像,在镜像里面安装好spark等软件。然后, 利用该镜像启动的虚机,也是已经包含spark等软件的,我们只需要配置即可。
qemu/kvm制作镜像很容易,可是,要在镜像里面安装软件,却比较麻烦。kvm命令启动的虚机,并不能联网(或者, 怎么配置kvm虚机进行联网,我并不太熟悉。),因此,只有通过宿主机往kvm虚机拷贝软件安装包。
这个问题我尝试了很久,最后通过google,找到了如下的解决办法。
#在宿主机上执行
kvm -m 1024 -redir tcp:3456::22 -drive file=centos-7.qcow2 -boot d -nographic -vnc :2
#在客户机上执行,远程拷贝宿主机上的文件。
scp user@hostip:/home/user/file .
[1] | 关于在kvm虚机和宿主机之间文件共享的详细介绍。网址:http://mathslinux.org/?p=202 |