Sunucu A'da bir dosya var (ki bir NAT'in arkasında, doğrudan adreslenebilir değil) Dosyanın kök ile sınırlı bir dizinde B sunucusuna kopyalanması gerekiyor. B sunucusunda sudo ayrıcalıklarına sahip bir hesabım var. Scp komutunun sözdizimi nedir?
Sunucu A'da bir dosya var (ki bir NAT'in arkasında, doğrudan adreslenebilir değil) Dosyanın kök ile sınırlı bir dizinde B sunucusuna kopyalanması gerekiyor. B sunucusunda sudo ayrıcalıklarına sahip bir hesabım var. Scp komutunun sözdizimi nedir?
Yanıtlar:
Öncelikle dosyayı sudo olmadan yazma erişimine sahip bir yere kopyalamanız gerekir.
scp yourfile serverb:
Sonra sudo kullanarak dosyayı taşıyın
ssh serverb sudo mv yourfile /path/to/the/destination
Yazılabilir bir yeriniz yoksa, kullanıcınız için yazma izniyle geçici bir dizin oluşturun.
ssh serverb sudo mkdir tempdir && sudo chmod 777 tempdir
scp yourfile serverb:tempdir
ssh serverb mv tempdir/yourfile /path/to/the/destination
chmod 777
, genellikle bunu yapmanın yanlış yoludur. Başka biri giriş yaptıysa ve bu kodu çalıştırmak üzere olduğunuzu bilseydi ne olacağını düşünün.
ssh sudo
benim için işe yaramıyor - "mevcut olmayan bir program ya da bir bilgi isteme programı belirtilmemiş" diye şikayet ediyor
SCP ile iki adımda yapmanız gerekir, ancak rsync ile aşağıdaki gibi yapabilirsiniz:
rsync --rsync-path="sudo rsync" <LOCALFILE> USER@SERVER2:/root
Not: Bu NOPASSWD
sudo yapılandırması gerektirir . Sudo şifresini girmeniz gerekiyorsa, iki aşamalı yol gereklidir.
Dizini kopyalamak için -r
parametre eklemeniz gerekir . Ve -v
ayrıntılı çıktı için.
Yukarıdaki yöntemi kimlik bilgileriyle kullanmak için, bunları ~/.ssh/config
dosyanıza eklemeniz gerekir.
Host SERVER2
HostName server2.example.colm
User USER
#IdentityFile ~/.ssh/custom_key.pem
sudo: sorry, you must have a tty to run sudo
ile sabit -e "ssh -tt"
.
-e "ssh -tt"
, anladım protocol version mismatch -- is your shell clean?
. Bunu düzeltmek için herhangi bir ipucu var mı?
Bu soruna geçici bir çözüm bulmak için ssh ve tar kullanabilirsiniz:
ssh -t host 'sudo -v'
ssh -C host 'cd /; sudo tar cf - path/to/file/or/dir' | tar xpsf - --preserve
Bu, önce sudo zaman damgasınızı günceller (gerekirse bir tty ( ssh -t
) gerektiren bir parola sorar ), sonra da bir tarball oluşturmak için yerel olarak sudo kullanır.
RedHat 5'teki "tar", "xpsf -" komutundan sonra gelen "--preserve" seçeneklerini gerektirir.
tar: Invalid replacement string
, kaldırmak -s
gibi görünüyor ( s
zaten için neye ihtiyacınız olduğundan emin değilim ). Çok teşekkürler; bu harika.
tty_tickets
devre dışı bırakılması gerekir, doğru mu?
Örneğin sftp sudo komutuyla kullanabilirsiniz:
sftp -s 'sudo -u REMOTE_SUDO_USER /usr/libexec/openssh/sftp-server' REMOTE_USER@HOST
Her seferinde sudo için şifre yazmanız gerekirse, dosyayı bir dosyaya kaydedebilirsiniz:
echo "Enter password: "; read -s password; echo $password > password_file
ve sonra kaynak dosya ile birlikte gönderin.
cat password_file source_file | ssh remote_host 'sudo -S sponge target_file'
Daha fazla üyeniz yoksa tee
, yerine kullanabilirsiniz sponge
.
Öncelikle dosyayı sudo olmadan yazma erişimine sahip bir yere kopyalamanız gerekir, Aşağıdaki iki adımı yapabilirsiniz.
Aşama 1:
scp filename newserver
Adım 2:
ssh newserver sudo mv filename /path/to/the/destination
Daha fazla bilgi için scp eğitimini okuyun
current server $ sudo scp username@server:source/path/filename /tmp/
Belirli bir dosyayı kaynaktan / tmp / o anki sunucuda kopyalayacaktır