Mam plik na serwerze A (który jest za NATem, który nie jest bezpośrednio adresowalny). Plik musi zostać skopiowany na serwer B w katalogu ograniczonym do roota. Mam konto na serwerze B z uprawnieniami sudo. Jaka jest składnia polecenia scp?
Mam plik na serwerze A (który jest za NATem, który nie jest bezpośrednio adresowalny). Plik musi zostać skopiowany na serwer B w katalogu ograniczonym do roota. Mam konto na serwerze B z uprawnieniami sudo. Jaka jest składnia polecenia scp?
Odpowiedzi:
Najpierw musisz skopiować plik do miejsca, w którym masz dostęp do zapisu bez sudo,
scp yourfile serverb:
Następnie przenieś plik za pomocą sudo
ssh serverb sudo mv yourfile /path/to/the/destination
Jeśli nie masz miejsca do zapisu, utwórz tymczasowy katalog z uprawnieniami do zapisu dla swojego użytkownika.
ssh serverb sudo mkdir tempdir && sudo chmod 777 tempdir
scp yourfile serverb:tempdir
ssh serverb mv tempdir/yourfile /path/to/the/destination
chmod 777
zazwyczaj jest to zły sposób. Zastanów się, co mogłoby się stać, gdyby ktoś inny był zalogowany i wiedział, że zamierzasz uruchomić ten kod.
ssh sudo
nie działa dla mnie - narzeka „brak tty i nie określono programu askpass”?
Z SCP musisz zrobić w dwóch krokach, jednak możesz to zrobić w jednym z rsync w następujący sposób:
rsync --rsync-path="sudo rsync" <LOCALFILE> USER@SERVER2:/root
Uwaga: to wymaga NOPASSWD
konfiguracja sudo. Jeśli musisz wprowadzić hasło do sudo, potrzebny jest dwuetapowy sposób.
Aby skopiować katalog, musisz dodać -r
parametr. I -v
dla pełnego wydruku.
Aby użyć powyższej metody z poświadczeniami, musisz dodać je do swojego ~/.ssh/config
plik, np.
Host SERVER2
HostName server2.example.colm
User USER
#IdentityFile ~/.ssh/custom_key.pem
sudo: sorry, you must have a tty to run sudo
naprawione przez -e "ssh -tt"
.
-e "ssh -tt"
, Dostaję protocol version mismatch -- is your shell clean?
. Jakieś wskazówki, jak to naprawić?
Możesz użyć ssh i tar do obejścia tego problemu:
ssh -t host 'sudo -v'
ssh -C host 'cd /; sudo tar cf - path/to/file/or/dir' | tar xpsf - --preserve
Najpierw aktualizuje datownik sudo (w razie potrzeby pytając o hasło, które wymaga tty ( ssh -t
)), a następnie używa sudo do zdalnego tworzenia tarballa i lokalnego wyodrębniania.
„tar” w RedHat 5 wymaga opcji „--preserve” po komendzie „xpsf -”.
tar: Invalid replacement string
, usuwanie -s
wydaje się, że to naprawia (nie wiesz, czego potrzebujesz s
w każdym razie). Wielkie dzięki; to jest niesamowite.
tty_tickets
być wyłączonym, prawda?
Możesz użyć sftp za pomocą polecenia sudo, na przykład:
sftp -s 'sudo -u REMOTE_SUDO_USER /usr/libexec/openssh/sftp-server' REMOTE_USER@HOST
Jeśli za każdym razem musisz wpisać hasło do sudo, możesz zapisać je w pliku:
echo "Enter password: "; read -s password; echo $password > password_file
a następnie wyślij go wraz z plikiem źródłowym.
cat password_file source_file | ssh remote_host 'sudo -S sponge target_file'
Możesz użyć tee
zamiast sponge
jeśli nie masz dodatkowych przedmiotów.
current server $ sudo scp username@server:source/path/filename /tmp/
Skopiuje określony plik ze źródła do / tmp / na bieżącym serwerze