skopiuj plik z systemu Windows do systemu Linux

16

Piszę jeden scenariusz. będzie działać na jednej maszynie z Linuksem. jego celem jest Linux, Solaris i Windows.

Wiem, że mogę używać scp do kopiowania plików między * nix. ale co powiesz na kopiowanie pliku z systemu Windows?

Te okna to maszyny testowe, w przypadku których nie można oczekiwać zainstalowania określonego oprogramowania, ponieważ system operacyjny może być często instalowany ponownie.

Alex
źródło

Odpowiedzi:

21

Użyj Samby .

Samba zapewnia usługę udostępniania plików zgodną z systemem Windows.

Możesz udostępnić katalog (na przykład /srv/samba/sharename) na komputerze z systemem Linux i uzyskać do niego dostęp z Windows tak: \\linuxservername\sharename. Nie potrzebuje żadnego dodatkowego oprogramowania po stronie Windows.

Samba jest zawarta w większości dystrybucji Linuksa. Zainstaluj go za pomocą menedżera pakietów, na przykład:

  • Ubuntu: sudo apt-get install samba smbclient

  • SUSE: zypper samba

  • CentOS / RedHat: yum install samba

Aby skonfigurować Sambę, zobacz:

lub wyszukaj w Google, aby znaleźć przewodnik po swojej dystrybucji.

Należy pamiętać, że może być konieczne skonfigurowanie zapory Linux, w przypadku jej użycia, aby akceptować połączenia z portami 137 / tcp, 138 / tcp, 139 / tcp i 445 / tcp (zobacz to i to ).


W powyższym opisie komputer z systemem Linux to serwer Samba, a system Windows montuje z niego udział.

W komentarzu poniżej wspominasz, że chcesz zautomatyzować proces transferu . Można to osiągnąć poprzez odwrócenie ról, tak aby Windows działał jak serwer, a Linux łączy się z nim za pomocą smbclient.

Dzięki smbclientnie musisz w ogóle montować udziału Windows. Na przykład, aby pobrać C:\Directory\file.txti skopiować go /tmpna komputer z systemem Linux:

smbclient '//windowsserver/c$' -c 'lcd /tmp; cd Directory; get file.txt' -U administrator%password

-cPolecenie do wykonania. Zobacz man smbclientszczegóły.

-U Nazwa użytkownika i hasło dostępu do udziału określonego jako username%password

Zmodyfikuj go do swoich potrzeb i dodaj do skryptu.

jaume
źródło
@max, dziękuję za wspaniałe odpowiedzi. Wiem, że samba może współpracować z systemem Windows. Ale nadal wymaga zaangażowania człowieka podczas kopiowania pliku. Ponieważ mój skrypt będzie działał na jednym systemie Linux, a maszyna zainstalowała sambę, w jaki sposób mogę pozwolić, aby jeden skrypt wykonywał kopiowanie? Wygląda na to, że lepiej zamontowałem dysk Windows na Linuksie, a potem mogę uzyskać do niego dostęp w Linuksie. Czy samba może to zrobić?
Alex
Tak, Samba może to zrobić. Co więcej, nie musisz wcale montować udziału Windows. Możesz użyć smbclientdo połączenia z udziałem Windows, skopiowania pliku i rozłączenia. Zredagowałem swoją odpowiedź, spójrz na nią.
jaume
Nie ma za co, cieszę się, że mogłem pomóc.
jaume
1
Szczególnie ta -copcja jest warta użycia w prostych przypadkach. Na moim komputerze hasło jest jawnym argumentem (bez żadnej opcji). A poza tym - wolę trzymać poświadczenia z dala od czytników wiersza poleceń (używając pslub [h]top, na przykład), dzwoniąc -U $(cat .username) $(cat .password).
Tomasz Gandor
3

Wiem, że powiedziałeś, że nie możesz oczekiwać zainstalowania określonego oprogramowania, ale istnieją klienci SSH / SCP / SFTP dla Windows, którzy nie wymagają żadnej konkretnej instalacji; dostępny jest tylko plik wykonywalny. Jedną z nich jest PuTTY z towarzyszem pscpi psftpnarzędziami, ale jestem pewien, że istnieją alternatywy. pscpi psftpmoże być sterowany całkowicie z wiersza poleceń, dzięki czemu doskonale nadaje się do zadań automatyzacji. Oba mają nawet -batchprzełącznik opisany jako „wyłącz wszystkie interaktywne monity” i prawie na pewno można go wykorzystać.

Ponieważ prawdopodobnie masz już zainstalowany i skonfigurowany serwer SSH / SCP / SFTP na serwerze, pozwala to uniknąć konieczności instalowania jakiegokolwiek oprogramowania na dowolnym hoście w celu skopiowania tych plików.

Kolejną zaletą może być fakt, że PuTTY jest open source na licencji permissive, więc jeśli nie robi tego, co chcesz od razu po wyjęciu z pudełka, powinno być względnie łatwe, aby działał tak, jak chcesz.

CVn
źródło
1
Dziękuję za twoją rekomendację. Spróbuję pscp i psftp. Są także świetnymi narzędziami.
Alex
1

Jestem CentOS 6użytkownikiem, więc wypróbowałem tę metodęCentOS 6

Zainstaluj sambę za pomocą

[root @ server ~] # yum zainstaluj sambę

Zapytanie o potwierdzenie

[root @ server ~] # rpm -qa samba
samba-3.5.10-125.el6.i686

Utwórz użytkownika Samba.

[root @ server ~] # useradd sambashare

Teraz utwórz hasło samby dla nazwy użytkownika sambashare za pomocą komendy smbpasswd.

[root @ server ~] # smbpasswd -a sambashare
Nowe hasło SMB:
Wpisz ponownie nowe hasło SMB:
Dodano użytkownika sambashare.

Utwórz katalog udostępniania samby

[root @ server ~] # mkdir / share

zmień własność folderu udostępnionego

[root @ server ~] # chown -R sambashare: sambashare / share /

Otwórz plik /etc/samba/smb.confi dodaj poniższe linie.

[dzielić]
komentarz = Udostępnij
ścieżka = / udostępnij
zapisywalny = tak
poprawni użytkownicy = sambashare

Uruchom usługę samba

[root @ server ~] # service smb restart
Zamykanie usług SMB: [OK]
Uruchamianie usług SMB: [OK]

Sprawdź konfigurację za pomocą testparmpolecenia

.
.
[dzielić]
komentarz = udostępnij
ścieżka = / udostępnij
poprawni użytkownicy = sambashare
tylko do odczytu = nie

W systemie Windows wpisz to run

wprowadź opis zdjęcia tutaj

Teraz wprowadź nazwę użytkownika i hasło samby

wprowadź opis zdjęcia tutaj

Gotowe

wprowadź opis zdjęcia tutaj

max
źródło
Dziękuję bardzo, max. za bardzo żywy samouczek dla początkujących.
Alex
@Alex jesteś mile widziany ... :-)
maks.