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 777
solito è il modo sbagliato di farlo. Considera cosa potrebbe accadere se qualcun altro avesse effettuato l'accesso e sapesse che avresti eseguito questo codice.
ssh sudo
non funziona per me - si lamenta "nessun regalo presente e nessun programma askpass specificato"?
serverb
o è necessario ssh serverb
separatamente, 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 NOPASSWD
configurazione sudo. Se devi inserire la password per sudo, è necessario il modo in due passaggi.
Per copiare la directory, è necessario aggiungere un -r
parametro. E -v
per un output dettagliato.
Per utilizzare il metodo sopra con le credenziali, è necessario aggiungerle al ~/.ssh/config
file, ad es
Host SERVER2
HostName server2.example.colm
User USER
#IdentityFile ~/.ssh/custom_key.pem
sudo: sorry, you must have a tty to run sudo
risolto 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 -s
in sembra risolverlo (non sono sicuro di cosa ti serva s
comunque). Grazie molto; Questo e spettacolare.
tty_tickets
di 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 tee
invece di sponge
se 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