Kullanıcının varsayılan kabuğunu kullanmadan ssh


4

Bunu "ne sorduğunuzu belirsiz" olarak kapatmak için bir oylama yapıldı. Görünüşe göre titiz olmak iyi bir şey değil, o yüzden kısa ve öz olacağım:

Uzak bir ana bilgisayara SSH yaptığınız zaman: bir programı doğrudan kullanıcının varsayılan kabuğu altında yürütmek yerine doğrudan çalıştırmak mümkündür.

  • ağ hava boşluklu
  • ağdaki herkes her makineye kabuk erişimine sahiptir
  • BT, bu değişikliklerin birinin kök kabuğu alma riskini arttırmaması koşuluyla, ne yapılması gerekiyorsa yapabilir (zaten mümkün olanın ötesinde).
  • Bunun gibi bir şeyin mümkün olduğunun kanıtı olarak: sftpssh "alt sistemi", kullanıcının varsayılan kabuğunu çalıştırmadan yürütebilir, scpalt sistemi hala kullanır.
    • Bir alt sistemi uygulamaya çalıştım, ancak yine de kullanıcının varsayılan kabuğu altında yürütüldü.

Bu soruna iyi bir çözüm olduğunu düşünmüyorum (çok sayıda insan olmayan * insanı yıllarca eğittikleri koltuk değneği bırakmaya ikna etmek yerine), ancak soruyu ortaya koyacağımı düşündüm. orada umut ediyorum yanıldım.


Aşağıda daha kısa özlü soru.

Ofisimde hepsi garip ve tuhaf yapılandırmalar kullanan çok sayıda insan (3-500 +) var. Yazdığımız yazılımın belirli bir kullanıcı için nasıl davranacağını tahmin etmek çok zordur, çünkü ortamları beklentilerimizi tamamen ihlal edebilir.

Bu sorunu gidermek için yapımızı kullanıcının ortamını soyunacak şekilde değiştirdim, böylece yapıyı etkileyemedi ve bu stratejinin başarısına dayanarak yazılımımızın çalışmasını aynı şeyi yapan bir kabuk betiğine sardık.

Ne yazık ki, başlatıcı hala kullanıcının ortamından etkilenebilir. Uzaktan çalıştırıldığında, kullanıcının .cshrc/ .logintipik olarak başlatıcının çalışmaya başlamadan önce uzun gecikmelere neden olan bir hurdalığı vardır.

Normalde "saçmalıklarını düzelt" demeye meyilli olurdum, ama * nix meraklısı insanlardan bahsetmiyoruz; bu, yıllarca dayandıkları bir koltuk değneğidir ve yapılandırma sorunları nedeniyle yazılımımızı suçlamaya devam etme eğilimindedirler.

Kısacası, goofy ortam komut dosyalarını tamamen kısa devre yaptırmanın bir yolunu arıyorum.

Bu durumu simüle etmek için varsayılan kabuğumu tcsh değerine alıp koyuyorum , sonra birkaç test hostname; sleep 10yaptım .cshrc:

  • sftp yazdırmıyor / uymuyor - bu durumda hedef makine, sftp'nin sshd'ye yerleştirildiği solaris idi ve bir linux kutusuna karşı test etmeyi düşünmedim. Koşu ptreesftp bağlantı hizmetinin verilmesi işlemi ağacının karşı bir kabuk altında koşmuyor gösterir.
  • scp metni yazdırır ve 10 saniye uyur
  • uzak ana bilgisayardaki ssh aracılığıyla komut çalıştırmanın her bir çeşidi komutun kullanıcının varsayılan kabuğunun altında çalışmasına neden olur; Denedim:
    • Açık - ssh komutunu geç
    • command= içinde .ssh/authorized_keys
    • Kişisel linux'uma özel bir "alt sistem" yaptım /etc/ssh/sshd_config
  • PermitUserEnvironmentSHELL ayarını denemek için makinemde etkin
    • Hiç işe yaramadı: SHELL=/bin/bash ssh -o "SendEnv SHELL" localhost
    • Tür çalıştı: SHELL ayarlamak için environment=veya kullanın~/.ssh/enviornment
      • SHELL’in kurulduğuna inanıyordu, ama aslında benim gerçek varsayılan kabuğumun altında çalışıyor.

netcatMevcut bir ssh seansı üzerinde bir kabuk ilerletmeyi kullandım , ancak bu bir yumurta kırmak için bir kızak kullanmak gibi görünüyor - hem dağınık hem de son derece uygunsuz.


Kuruluşumuzdaki bir kişi, başka bir kullanıcı yapmayı önerdi, ne olursa olsun, herkesin o kullanıcı olarak ssh üzerinden giriş yapabileceğini, ardından :: sallanan el ile çok bulutlu bir balon çözümü: programın orijinal kullanıcı olarak çalışmasını sağlamak için .

Böyle bir şey yapmak konusunda biraz şüpheliyim. Netcat ile bir kabuk iletmek veya geçici olarak yeniden adlandırmak gibi ağır elle ve kırılgan bir şey iletmek kadar kötü olmayabilir .cshrc, ama yine de düşkün değilim.

Herhangi bir öneriniz açıktır.


Tamam, yazılımınız kullanıcının ortamını soyan bir kabuk betiği çalıştırarak başlatılır ve bu kabuk betiği yerel olarak çağrılırsa çalışır, ancak ilk önce SSH başka bir makineye girip oradaki betiği çağırdığında işe yaramaz mı? Söylediğin şey bu mu?
Spiff

Daha iyi kelime için düzenleyeceğim. Hala düzgün davranıyor, ancak .cshrcilk önce bir demet saçma yaparsa (bu nedenle sleep 10) uzun gecikmelere neden olabilir.
Brian Vandenberg

Sorunlu kullanıcı ortamı içi dolu mu ~/.ssh/rcyoksa /etc/ssh/sshrc?
Spiff

Hayır! Ben verdiğim örnekle basit durumda bunu aşağı haşlanmış ettik: koymak Tcsh için varsayılan kabuk, set sleep 10Gözlerinde farklı .cshrcve bu makineye ssha ve yol açmadan bir komut çalıştırmayı denediğinizde .cshrciçeriği yürütülecek.
Brian Vandenberg

İşlemde bir noktada alternatif bir kabuk çalıştırmak mümkün mü? Gibi bir şey ssh -t <host> sh? Veya hatta bir şey ssh <host> csh -f [<command>]? (Okuduğum dokümanlar
-f'nin

Yanıtlar:


1

Bir alt sistemle istediğinizi başarmanız mümkün olmalıdır, ancak OpenSSH kodu yalnızca sftp alt sistemini sağladığından ve yalnızca ek tanımlar için genişletilebilir bir çerçeve oluşturduğundan, özel bir sshd ikili yazması gerekeceğinden oldukça eminim.


2

En azından Bash ile "-t" argümanına sahip ssh (örn. ssh server1 -t '/foo/bar/script.sh'), "~ / .Bashrc" ("~ / .cshrc / login" ifadesine eşdeğer bash) çalıştırmadan uzak bir komut çalıştıracaktır.


Bu, bu problemin daha rahatsız edici yönlerinden biriydi. Kullanıcının varsayılan kabuğu bash ise, kaynak bulmamak için hiç de zor değildi .bashrc. cshve tcshdiğer taraftan, biraz daha tahriş edicidir.
Brian Vandenberg

Neden bu soruyu abartmadığımı bilmiyorum. Gereksinimlerimi karşılamamasına rağmen, hala potansiyel olarak bir başkası için değerlidir.
Brian Vandenberg,
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.