Ssh ve sudo birlikte bashda nasıl kullanılır?


10

Bu senaryoyu açıklayan bir soru bulamadım.

Birden çok makineden günlük almak için çok temel bir bash komut dosyası yürütmeye çalışıyorum. Komut dosyasını yerel olarak çalıştırıyorum, ancak ssh aracılığıyla harici bir makineye erişmenin yanı sıra bu makinede bir kez ayrıcalıklı bir kullanıcıya sudo ...

ssh myuser@machine.net
sudo su  - privledged_user
cat logs > file.txt

Bunu sh -x ile çalıştırmak bash'ın 'ssh' hattına sıkıştığını ortaya koyuyor. Bu yüzden bunu revize etmeye çalıştım:

ssh myuser@machine.net sudo su - privledged_user cat logs > file.txt

Bu da süresiz duruyor. Bu soruna daha iyi bir çözüm var mı ?? Sudo su kullanarak söyleyebileceğim bir yol görmüyorum ...

Herhangi bir yardım için teşekkürler!


Neden yakın oylama? Bu soru konuyla ilgili: sunucuların, iş istasyonlarının, depolama veya ağların donanım veya yazılımlarını, bunları yönetmek, izlemek veya otomatikleştirmek için kullanılan araçları yönetmek
jlliagre

Yanıtlar:


5

Mevcut ortamımda bunu elde etmenin yolu, -ttty tahsisini zorlayan bayrakla ssh çalıştırmak ve daha sonra içindeki sudo -u kökü çalıştırmaktır:

ssh -t hostname << EOF
  command1
  sudo -u root command2
  sudo -u otheruser "command3 | command4"
  sudo -u root /bin/bash -c "command5; command6; command7"
  command8 && ( sudo -u otheruser /bin/bash -c "cmd1 ${1}; cmd2 {$2}" ) || echo cmd2 did not work

EOF

Hiçbir şifre gerek kalmaması için hesabımı uzak tarafta sudoers var.

Bu örnek, bunu tek bir ssh oturumunda, bash ile veya bir alt kabuk içinde birden çok komut çalıştırmak da dahil olmak üzere farklı yollar gösterir. Yukarıdaki kodu çalıştırılabilir bir komut dosyasına koyarsanız, komut satırı bağımsız değişkenlerini ($ 1 ve $ 2) ssh'ye geçirebileceğinizi ve bunların genişletileceğini ve uzak tarafta başvuruda bulunacağını unutmayın.


Ne yazık ki uzak sunucuyu yönetmediğim için burada sudo su kullanarak sıkışıp kaldığımı düşünüyorum . Bu hala bu formatta çalışır mı?
Matt124234

evet de işe yarayacak. istendiğinde şifreyi girebilirsiniz.
Michael Martinez

Denedim: ssh -t mrhyner@stg-app3.indeed.net << EOF sudo su - adcentrl egrep 'ERROR \ | WARN' / home / adcentrl / cronjobs / logs / * / * EOF Ama aldım: "Pseudo -terminal tahsis edilmeyecektir çünkü stdin bir terminal değildir. "
29.12.2014

mükemmel tamam. bu uyarıyı dikkate almayın ve devam edin. isterseniz uzak uçtaki / etc / sudoers içindeki "RequireTty" yi devre dışı bırakabilirsiniz
Michael Martinez

5

Sudo'nun size parola sormasını istemiyorsanız veya durduramıyorsanız, basit bir püf noktası yerel olarak okumak ve yerel bir değişkende saklamaktır:

read -p 'Password: ' -s password

ssh -t user@1.2.3.4 <<EOF
  echo "$password" | sudo -S whoami
EOF

1

Sudo şifresiz komutlara izin verecek şekilde yapılandırılmışsa, bu istediğinizi yapmalıdır:

ssh myuser@machine.net "sudo su - privileged_user -c 'cat logs'" > file.txt

veya

ssh myuser@machine.net "sudo su - privileged_user -c 'cat logs > file.txt'"

file.txtdosyanın yerel olarak mı yoksa uzaktan oluşturulmasını mı istediğinize bağlı olarak.

Aksi takdirde, uzak kullanıcının şifresini şu adrese geçirmenin bir yolu sudo:

echo mrhyner_password | \
  ssh mrhyner@test-server.net \
  "sudo -S su - adcentrl -c 'egrep ERROR\|WARN /home/adcentrl/cronjobs/logs/*/*'"

Çok ilginç. Ancak -t olmadan ssh kullanmak bana "tty yok" der. -T eklenmesi bu hatayı kaldırır, ancak bir parola girmesini istediğinden 'sudo su' onurlandırmaz. Özellikle yaptığım şey: ssh -t mrhyner@test-server.net "sudo su - adcentrl -c egrep" ERROR \ | WARN "/ home / adcentrl / cronjobs / logs / * / *" Bu bana: bash : WARN: mrhyner için komut bulunamadı [sudo] şifre:
Matt124234

Üzgünüm, görünüşe göre bu konuda yorumlarımı nasıl biçimlendireceğimi bilmiyorum
Matt124234

Sudo'nun uzak hesabınız için şifresiz olarak yapılandırıldığını varsayıyordum.
jlliagre

ve fazladan tek tırnak eksik.
jlliagre

Bu, bash'ın ssh komutunu bir nedenden dolayı onurlandırmamasına neden olmamı sağladı. Yerel ev
sahibimden
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.