I was wondering if there is a way to use Samba to send items to a client machine via the command line (I need to send the files from the Samba server). I know I could always use scp
but first I was wondering if there is a way to do it with Samba. Thanks!
7 Answers
Use smbclient
, a program that comes with Samba:
$ smbclient //server/share -c 'cd c:/remote/path ; put local-file'
There are many flags, such as -U
to allow the remote user name to be different from the local one.
On systems that split Samba into multiple binary packages, you may have the Samba servers installed yet still be missing smbclient
. In such a case, check your package repository for a package named smbclient
, samba-client
, or similar.
-
I keep getting
Connection to [IP] failed (Error NT_STATUS_CONNECTION_REFUSED)
– t0xicCommented May 30, 2015 at 0:18 -
When I wrote
//server
above, I mean what you are calling the client machine, which in this case is acting as a server. It needs to have a folder or drive shared via SMB for this to work. Commented May 30, 2015 at 0:27 -
Oh... that won't really work for me. I guess I'll just use
scp
. Thanks anyway though!– t0xicCommented May 30, 2015 at 11:09 -
1@fleebow8: You can install a third-party SCP server on the client machines, but you can't right-click a folder in Windows Explorer and say "Share"? Commented May 30, 2015 at 17:43
-
2how would you
put
alocal-file
that wasn't in your current directory? Commented Jan 11, 2019 at 3:15
curl supports the smb
v1 protocol since v7.40:
curl --upload-file /path/to/file.ext -u 'DOMAIN\Username' smb://172.16.17.52/ShareName/
SMB v1 is not available by default in Windows anymore so this won't work with current Windows shares in their default configuration.
-
1This worked great for me:
curl --upload-file /home/me/local_file.txt --user "OurWindowsDomain\UserName:thePassword" smb://172.16.17.52/ShareName/Path/To/Remote/Dir
. I got a list of all the available sharenames withsmbclient -L //172.16.17.52 -U UserName%thePassword -W OurWindowsDomain
Commented Feb 4, 2019 at 11:38 -
-
Can I use
curl --upload-file
and create a new directory on samba?--create-dirs
doesn't work.– CoreyCommented Jun 18, 2020 at 10:21
The easiest way I found is using smbget
smbget smb://PATH/TO/FILE/test.txt
If authentication is needed (if password is not provided, it will prompt for password):
smbget smb://PATH/TO/FILE/test.txt -U "[email protected]%myPassword"
You can also specify where to save the file and the name of the file after copy:
smbget smb://PATH/TO/FILE/test.txt -U "[email protected]%myPassword" -o /LINUX/PATH/remote_test_file
Really working will be this:
$ smbclient //server/share -c 'cd c:/remote/path ; put local-file remote-file'
local-file - file from local machine
remote-file - copy to this file on remote machine
I did lot of research and finally I was successful to transfer file using below command through shell file in one shot.
smbclient -m smb2 '//xx.xxx.xxx.xx/share1/' -U domxyz/xyz%password123 -c 'cd "FOLDER 1/FOLDER 2/" ; put FILE1.xlsx'
smbclient Version 4.9.5-Debian
and curl 7.64.0
didn't work for me (Linux kali 4.19.0-kali4-amd64
)
This did:
smbmap -H server -u username -p password --upload local-filename share\\remote-filename
Another way if the share is already mounted by fuse
If you are running some desktop with shares already mounted by nautilus, caja or any other file manager, you could be using fuse (instead of smbclient).
If so, you may find some mountpoints at:
ls -l /run/user/$UID/gvfs/
drwx------ 1 charlie charlie 0 Feb 2 10:04 smb-share:server=hostname,share=documents
Yes this is a mountpoint!
df -h /run/user/$UID/gvfs/*
Filesystem Size Used Avail Use% Mounted on
gvfsd-fuse 16.2T 3.6T 12.6T 59% /run/user/1000/gvfs
And you could use it as a regular filesystem.
cp $HOME/myfile \
/run/user/$UID/gvfs/smb-share:server=hostname,share=documents/destpath/