Zmiana użytkownika podczas scp

16

Muszę skopiować plik między maszynami z systemem Linux. Problem, którego używa użytkownik do logowania ( myuser), różni się od użytkownika, który może uzyskać dostęp do pliku.

Jeśli tylko przejdę sshdo komputera, mogę zmienić użytkownika za pomocą sudo su someuser, czy mogę to zrobić w jakiś sposób scp?

Podczas korzystania z WinSCP udało mi się to zrobić, konfigurując SCP / Shell, więc uważam, że musi istnieć podobny sposób, aby to zrobić za pomocą czystej powłoki.

Tarlog
źródło
Jestem zmieszany. Dlaczego nie logujesz się jako użytkownik manipulujący plikiem?
rahmu
Ponieważ zalogowanie się przy użyciu innego użytkownika jest niemożliwe.
Tarlog,
Co powiesz na łączenie się sshi wykonywanie scp, coś takiego ssh myuser@host "sudo scp ...":?
rahmu
Może odpowiedź tutaj może zadziałać w takiej sytuacji? unix.stackexchange.com/questions/43094/… @Tarlog Zakłada się, że na samym komputerze zdalnym można ssh someuser @ remote
Bernhard

Odpowiedzi:

9

Zakładając, że użytkownik, do którego MOŻESZ ssh nie potrzebuje hasła do sudo su na docelowego użytkownika, możesz spróbować:

dd if=myfile | ssh some.host "sudo -u targetuser dd of=myfile" 

... Uwaga, wciąż nie jestem przekonany, że samo skonfigurowanie, targetuseraby zezwalać tylko na scp / sftp / rsync przez SSH i używanie pary kluczy RSA do uwierzytelniania nie jest lepszą opcją.

Shadur
źródło
1
lub tar -cvf - * | ssh user@host "sudo -u targetuser tar -C /targetdir -xf -"kilka plików
Matt
Również prawdą, a przypuszczam, że możemy dyskutować, czy -zczy -jsą przydatne w zależności od szybkości łącza i sprzętu komputerowego po obu stronach ...
Shadur
3

Jeśli znasz dane uwierzytelniające drugiego użytkownika ( someuser), możesz po prostu podać je podczas scprozmowy.

Ze man scpstrony:

Nazwy plików mogą zawierać specyfikację użytkownika i hosta wskazującą, że plik ma zostać skopiowany na / z tego hosta. Lokalne nazwy plików mogą być jawne przy użyciu bezwzględnych lub względnych ścieżek, aby uniknąć traktowania przez SCP nazw plików zawierających „:” jako specyfikatorów hosta. Dozwolone są również kopie między dwoma zdalnymi hostami.

Oto zastosowana składnia:

[[user@]host:]/path/to/file

Przykład

Chcesz skopiować plik /home/foo/barz host1lokalnego hosta, używając użytkownika someuser, oto polecenie:

scp someuser@host1:/home/foo/bar .

Zostaniesz poproszony o uwierzytelnienie (hasło, klucze, ...).

rahmu
źródło
1
Nie można zalogować się jako inny użytkownik.
Tarlog,
Następnie ustal login tylko do scp / rsync za pomocą kluczy RSA.
Shadur
1
Niemożliwe jest korzystanie z innego użytkownika za pomocą jakiegokolwiek loginu. Poza tym używam już kluczy RSA dla ssh / scp.
Tarlog,
1

Prawdopodobnie jest to możliwe , ale powiedziałbym, że jest to bardzo niewygodny sposób.

Moją pierwszą sugestią jest zalogowanie się jako ten użytkownik. Nawet jeśli nie masz hasła tego użytkownika, możesz dodać własny publiczny klucz ssh do jego autoryzowanych_kluczy, a następnie scp za pomocą ich klucza, jak pokazuje rahmu.

Jeśli nie jest to możliwe, moją drugą sugestią jest zalogowanie się przez ssh, sudo do użytkownika i utworzenie pliku tar z plikami, które chcesz skopiować, i umieszczenie go w miejscu, które twój użytkownik może przeczytać. Następnie przeszukaj plik tar.

Jenny D.
źródło
Nie można zalogować się do drugiego użytkownika. Tak, sam wymyśliłem drugą sugestię. Szukasz łatwego sposobu :)
Tarlog
Link opublikowany przez gcb powinien więc być przydatny. Przynajmniej jeśli będziesz to robił więcej niż raz. Lub, oczywiście, możesz zmienić prawa dostępu do pliku, aby dać dostęp do niego własnemu użytkownikowi.
Jenny D
Cóż, próbuję utworzyć skrypt (który oczywiście będzie używany wielokrotnie), który będzie używany przez różnych użytkowników. Udzielenie mi dostępu tak naprawdę nie pomoże. Każdy, kto jest w stanie „sudo su otheruser”, powinien móc uruchomić skrypt.
Tarlog,
Gotcha Zacznę od linku z gcb, a jeśli masz problemy ze skryptem, opublikuj go i sprawdź, czy możemy zebrać trochę pomocy.
Jenny D,
0

Próbowałem podać kilka przykładów w następnym artykule. Podstawową ideą nie jest użycie scp, ale użycie dd i ssh z przełącznikiem użytkownika sudo. Popatrz:

http://hmmss.wordpress.com/2014/07/02/ssh-and-scp-with-another-user

Gokhan Demir
źródło
1
Lepiej byłoby podać więcej szczegółów tutaj, jeśli link zostanie unieważniony, twoja odpowiedź ma niewielką wartość.
Anthon