Ho un file sul server A (che è dietro un NAT quindi non indirizzabile direttamente). Il file deve essere copiato sul server B in una directory limitata a root. Ho un account sul server B con privilegi sudo. Qual è la sintassi per il comando scp?
Ho un file sul server A (che è dietro un NAT quindi non indirizzabile direttamente). Il file deve essere copiato sul server B in una directory limitata a root. Ho un account sul server B con privilegi sudo. Qual è la sintassi per il comando scp?
Risposte:
Innanzitutto, devi copiare il file in un posto in cui hai accesso in scrittura senza sudo,
scp yourfile serverb:
Quindi spostare il file utilizzando sudo
ssh serverb sudo mv yourfile /path/to/the/destination
Se non si dispone di un luogo scrivibile, creare una directory temporanea con autorizzazione di scrittura per l'utente.
ssh serverb sudo mkdir tempdir && sudo chmod 777 tempdir
scp yourfile serverb:tempdir
ssh serverb mv tempdir/yourfile /path/to/the/destination
chmod 777solito è il modo sbagliato di farlo. Considera cosa potrebbe accadere se qualcun altro avesse effettuato l'accesso e sapesse che avresti eseguito questo codice.
ssh sudonon funziona per me - si lamenta "nessun regalo presente e nessun programma askpass specificato"?
serverbo è necessario ssh serverbseparatamente, quindi eseguire sudo ...dopo aver effettuato l'accesso.
Con SCP, devi fare in due passaggi, tuttavia, puoi farlo in uno con rsync come segue:
rsync --rsync-path="sudo rsync" <LOCALFILE> USER@SERVER2:/root
Nota: questo richiede una NOPASSWDconfigurazione sudo. Se devi inserire la password per sudo, è necessario il modo in due passaggi.
Per copiare la directory, è necessario aggiungere un -rparametro. E -vper un output dettagliato.
Per utilizzare il metodo sopra con le credenziali, è necessario aggiungerle al ~/.ssh/configfile, ad es
Host SERVER2
HostName server2.example.colm
User USER
#IdentityFile ~/.ssh/custom_key.pem
sudo: sorry, you must have a tty to run sudorisolto da -e "ssh -tt".
-e "ssh -tt", capisco protocol version mismatch -- is your shell clean?. Qualche suggerimento su come risolverlo?
Puoi usare ssh e tar per aggirare questo:
ssh -t host 'sudo -v'
ssh -C host 'cd /; sudo tar cf - path/to/file/or/dir' | tar xpsf - --preserve
Questo prima aggiorna il tuo timestamp sudo (chiedendo una password se necessario, che richiede un tty ( ssh -t)), quindi usa sudo per creare un tarball da remoto ed estrarlo localmente.
"tar" su RedHat 5 richiede che le opzioni "--preserve" vengano dopo il comando "xpsf -".
tar: Invalid replacement string, la rimozione -sin sembra risolverlo (non sono sicuro di cosa ti serva scomunque). Grazie molto; Questo e spettacolare.
tty_ticketsdi essere disabilitato, giusto?
Puoi usare sftp con il comando sudo, ad esempio:
sftp -s 'sudo -u REMOTE_SUDO_USER /usr/libexec/openssh/sftp-server' REMOTE_USER@HOST
Se è necessario digitare la password per sudo ogni volta, è possibile salvarla in un file:
echo "Enter password: "; read -s password; echo $password > password_file
e quindi inviarlo insieme al file di origine.
cat password_file source_file | ssh remote_host 'sudo -S sponge target_file'
Puoi usare teeinvece di spongese non hai moreutils.
Innanzitutto, è necessario copiare il file in un posto in cui si dispone dell'accesso in scrittura senza sudo. È possibile eseguire i due passaggi seguenti.
Passo 1:
scp filename newserver
Passo 2:
ssh newserver sudo mv filename /path/to/the/destination
per maggiori informazioni leggi il tutorial di scp
current server $ sudo scp username@server:source/path/filename /tmp/
Copia il file specifico dall'origine a / tmp / nel server corrente