问题:
Ubuntu 18.04LTS 用smb方式连接服务器192.168.0.123失败,显示:“从服务器获取共享列表失败”,服务器192.168.0.123的操作系统为windows,且共享设置正常。
原因不明,之前的ubuntu 16.04没有这个问题,但是像deepin 15.8也存在这个问题。
假设:
IP地址:192.168.0.123
用户名:myname
密码:1234
共享目录名称:E盘
解决方法:
一、命令行下的smb连接
$ sudo su
#必须用root权限
smbclient -L //192.168.0.123 -U myname
#查询有哪些共享目录,需要输入用户密码
例如显示:
Sharename Type Comment
--------- ---- -------
IPC$ IPC 远程 IPC
Users Disk
E盘 Disk
可以看到这里目录“E盘”,然后就可以挂载这个目录(或者说这个盘)
smbclient //192.168.0.123/E盘 -U myname
#进入这个目录,这时候会出现smb: \>
smb: \> help #查询可以用的命令
比如smb: \> ls #查询文件情况
这个命令可以解决在不清楚有什么共享目录时可以找到自己想要的那个目录的具体名称(比如本例中的E盘),这个名称对下一步很重要。
二、用桌面文件管理器打开
$ sudo apt install cifs-utils
#安装cifs-utils服务
$ sudo mkdir /mnt/123E
#创建一个挂载用的目录,要放在/mnt目录下,自己命名,比如123E
$ sudo mount.cifs //192.168.0.123/E盘 /mnt/123E -o username=myname, passwd=1234
#挂载到/mnt/123E目录,会出现输入密码要求
Password for myname@//192.168.0.123/E盘: 1234
请注意,username=XXX逗号后面是有空格的!
$ sudo nautilus /mnt/123E
用文件管理器打开这个目录(其他linux系统可以尝试用文件管理器,找到/mnt/123E,右键“以管理员权限打开”即可)。
三、以后简化
如果有多次需要,可以通过写sh文件和设置桌面快捷方式来解决。
1、Ubuntu下的快捷方式
(1)写运行挂载的sh,名字假设为123.sh
$ sudo apt install expect
#安装expect,接下来要自动录入密码时会用到这个expect包
$ gedit /home/XXX/123.sh
#假设在用户XXX的主目录下做一个sh文件,内容参考如下:
#!/usr/bin/expect
set timeout 30
spawn sudo mount.cifs //192.168.0.123/E盘 /mnt/123E -o username=myname, passwd=1234
expect “XXX 的密码:”
send “987654\r”
expect “E盘:”
send “1234\r”
spawn sudo nautilus /mnt/128E
expect “XXX 的密码:”
send “987654\r”
interact
exit
然后保存退出,在文件管理器找到123.sh,右键,属性——权限——允许作为程序执行文件,打勾。
补充说明一下,expect包是可以找到想要输入密码的部分,然后send发送密码过去,\r 相当于回车。
expect包的最基本语法就是:spawn 命令——expect “文字:”——send “密码\r”
每次遇到sudo命令都要send一次密码,不用sudo打开目录会出现只能读、不能写的问题。
(2)做一个桌面快捷方式
用gedit写一个.desktop文件
Type=Application
Terminal=true
Name=123服务器E盘
Icon=/usr/share/icons/gnome/256×256/status/connect_established.png
StartupNotify=true
Exec=sh /home/XXX/123.sh
保存到桌面,例如命名为123.desktop,右键,属性——权限——允许作为程序执行文件,打勾。
说明一下,Icon是图标,可以是ico、png文件,以后也可以在.desktop属性里面去修改,这里只是提供一个例子。
注意:Exec= 必须放在最后一行
2、其他Linux下可以尝试
用vim或者nano把命令按顺序写好,这里假设root用户的密码是987654,
内容如下:
echo 987654 | sudo -S su
mount.cifs //192.168.0.123/E盘 /mnt/123E -o username=myname, passwd=1234
nautilus /mnt/123E
然后把文件改成.sh后缀(比如123E.sh)保存在一个目录下,右键,属性——权限——允许作为程序执行文件,打勾。需要的时候就在终端运行
./123E.sh
此时就会自动弹出文件管理器并打开共享目录。