Bash_profile veya bashrc kullanmadan giriş yap


75

Öyleyse, birisinin kendi .bashrciçinde (veya onun) oturum açmasını önleyen bir şey yazdığını varsayalım ssh(örn. Ssh girişi dosyadaki hata nedeniyle). Bu kişinin yürütmeden giriş yapabileceği (veya .bashrcdiğerini çalıştığından beri) veya başka bir şekilde dosyayı silme / yeniden adlandırma / geçersiz kılma yolu var mı?

Makineye fiziksel erişiminizin olmadığını varsayalım ve bu, ssh özelliği olan tek kullanıcı hesabıdır.

Referans için: .bash_profileiçerir .bashrc:

[[ -f ~/.bashrc ]] && . ~/.bashrc

Düzenleme: Denedim şeyler:

ssh user@host "rm ~/.bashrc"

scp nothing user@host:/RAID/home/tom/.bashrc

ssh user@host  "/bin/bash --norc"

Hepsi hata veriyor:

/RAID/home/tom/.bashrc: line 16: /usr/local/bin/file: No such file or directory
/RAID/home/tom/.bashrc: line 16: exec: /usr/local/bin/file: cannot execute: No such file or directory

4
Scp komutunuz çalışmayacak çünkü scp bağlandığında .bashrc dosyasını da okuyacak. Sorunu önlemek için Gelecekte, [ -z "$PS1" ] && return./bashrc dosyasının başlangıcına benzer bir şey ekleyebilirsiniz . Bu şekilde scp, ilk satırdan sonra .bashrc dosyasının ayrıştırılmasını durduracak ve acil durumlarda üzerine yazabileceksiniz.
dalloliogm

Yanıtlar:


24

Sanırım tek seçeneklerin:

  • başka bir kullanıcı olarak ssh ve hesabınıza su;

  • Ana bilgisayarda ilgili hizmetler etkinse, ftp veya smbclient gibi bir şey kullanın;

  • açık bir ağ servisinde açık bir güvenlik açığı bulun ve bu avantajdan yararlanın :).

  • sorunu çözmek için bir yönetici olsun.


4
"Makineye fiziksel erişiminizin olmadığını varsayalım ve bu, ssh özelliği olan tek kullanıcı hesabıdır."
Dennis Williamson,

Ben bu rotadan aşağı gidiyorum. Çözümü bulduktan sonra göndereceğim. Neyse ki, birkaç tane saldırı yolum var.
Tom Ritter,

1
sunucuma SFTP Filezilla kullandım ve beni düzeltti. Çok teşekkürler, beni kurtardın. .Bash_profile dosyamda kazara bir "çıkış 1" durumu vardı ve beni hortumladı.
djangofan

117

ssh -t username@hostname /bin/sh benim için çalışıyor.


Bu iyi çalışır - basit ve sorunu çözmek için kullanabileceğiniz bir kabuk sağlar.
MT.

1
Bunu Google Chrome'daki Güvenli Kabuk uygulamasıyla ( chrome.google.com/webstore/detail/secure-shell/… ) yapmaya çalışıyorum ancak komut satırı argümanlarını nasıl / nereye koyacağınızı bulamıyorsunuz. Herhangi bir ipucu?
Benj

2
Bu benim için işe yaramıyor (adam sayfasına göre olsa da). Yerel ana bilgisayar ubuntu 14.04.1 çalıştırır ve uzak ana bilgisayarda ubuntu 12.04.5 olur. Benim giriş kabuğum tcsh ve uzaktaki ana bilgisayarda çöp yazdırıyor çünkü tssh alamıyorum (tcsh: Böyle bir dosya veya dizin yok tcsh: "/ u / levy" den başlatmaya çalışıyorum - ki bunun nedeni olduğu söylendi. dizini NSF monte edilmiştir). Giriş kabuğunu atlayarak sorunu çözeceğimi düşündüm ama bu işe yaramadı.
Silvio Levy,

2
Eğer varsayılan kabuğunuz csh / tcsh ise, etkileşimli olmayan kabuklar için daima.cshrc / .tcshrchatta kaynak sağlayacaktır .
Brian Vandenberg

Burada oturmak için kendi aptallığımla kıçımı gülüyorum. Çözümün çok işe yaradı. Bu
tamircinin bir şeyler yapmasına

36

Aynı problemi yaşadım ve bir şekilde bunu çözebildi. Sisteme erişmek için ssh kullandım ve sisteme girdiğimde Ctrl + c tuşlarına basıp tuttum. Sonra, ~ / .bashrc okunmadı ve değiştirebildim.


11
Kuşkuluydum, ama bu gerçekten işe yarıyor ...
rmobis

Bu bir dahi!
user1747134

Aslında işe yarıyor ... teşekkürler! Diğer yöntemler benim için hiç işe yaramadı.
Zzzach ...

mac sadece bir .bash_profile ile, bu benim için çalıştı :)
AnneTheAgile

OMG, tüm interneti aradığımı sanıyordum, sonra bunu denemeye karar verdim ve bu benim için çalışan tek yol! Teşekkürler!
Jiahao Cai,

21

Kurmuş olduğum bir ağ izleme yazılımında bir web arayüzü üzerinden root olarak bir komutu çalıştırmak için yayınlanmış bir CVE kullandım. rm /RAID/home/tom/.bashrc

Sonra giriş yapabilir ve yaptığım değişiklikleri geri alabilirim.


11
Bu aynı anda hem harika hem de başarısız.
MikeyB

1
@ TomRitter: Lütfen bu referansı veriniz.
user2284570,

1
Kaktüslerin oooold versiyonundaydı, yani 8 yıllık bir yazılım kullanmıyorsanız, size yardımcı olacağını sanmıyorum. 8 yaşında bir yazılım kullanıyorsanız, size yardımcı olamam. ;)
Tom Ritter,

15

Bir) başlamak gerekir bash olmadan sourceya ing' ~/.bashrcya ~/.bash_profilehayır var / b) böyle bir kabuk tam giriş kabuğu olmaz çünkü tty ekli, kuvvet ssh bir takmak için tty :

ssh -t user@host bash --norc --noprofile

3
Bu işe yarar, ancak normal istemi istemeyeceğinize dikkat edin, sadece boş bir ekran. lsKendinizi içinde olduğunuza ikna etmek için bir deneyin :). Ayrıca bunun bir dumbterim kullanacağına dikkat edin , bu yüzden benim için nano çalışmıyor
Ciprian Tomoiagă

7

Şansın bitti.

Tüm ssh komutları giriş kabuğunuzu çalıştırır. ssh $COMMANDkoşar $SHELL -c $COMMAND, scpkoşar $SHELL -c /path/to/sftp-server, sade sshsadece kabuğunu çalıştırır.


3
Bu aynı zamanda sftp için de geçerlidir - SSH alt sistemleri bile görünüşe göre bir kabuk içinden yürütülür.
lxgr

Tecrübelerime göre haklısın, ssh man sayfası "Eğer komut belirtilirse, bir giriş kabuğu yerine uzak ana bilgisayarda çalıştırılıyor." Yine de poster en yüksek puanlı cevabı kullanarak sorunu çözebildi (ssh hostname / bin / sh). Ne oluyor?
Silvio Levy

@ Silvio, OP'nin cevabı SSH ile ilgili olmayan bir istismar kullandığı yönünde.
Tobu,

Sağ. Biri en yüksek puan alan cevaplarla başarı bildirmiş ve aceleyle OP olduğunu varsaymıştım. Keşke işe yarasaydı - Ben de benzer şekilde bir durumla karşı karşıya kaldım, sadece sinir bozucu değil sadece can sıkıcı. (Yukarıdaki en yüksek puanlı cevap altındaki
Silvio Levy

6

Yukarıdaki cevapların hiçbiri ssh'nin giriş kabuğunu atlayamaz. Tam bir komut satırı geçebilir ve komutun işlenmesi ve komutun çalışma ortamının ayarlanması için uzak kabuğu çalıştırır. Mermiler bunun için var ve Unix yolu. Kabuğu olmayan bir şeyi çalıştırmayı deneseydin her türlü uyumluluk problemine sahip olursun. Aynı şekilde, bir C kontrolünü denemek, kaçınmaya çalıştığınız davranış olan calling exit ile aynı şekilde yapılmalıdır. Bash devam ederse, onun bir hata. Neden insanlar, man sayfasındaki farklı bir şey söylemeye gerek duyduğunu söylemeye devam ediyorlar çünkü man sayfamdaki sıralamadan hiçbir şey söylemedi.

Ek olarak, çoğu linux sistemde, / bin / sh komutunu seçmek hiçbir şey yapmaz çünkü bu sadece bash ile bir bağlantıdır!

Test etmek ister misin? "Echo" ifadelerini size .bashrc ve .profile dosyasına ekleyin ve hangisinin çalıştığını görün. Yaptım. İşte sonuçlar.

ssh user@host.bash_profile ssh user@host /bin/bashkomutunu çalıştırır .bashrc komutunu çalıştırır, ancak etkileşimli olmadığını düşünüyor (istem yok). ssh -t user@host /bin/bash.bashrc komutunu iki defa çalıştırır ... bir kez oturum açma, bir kez geçirilen komut için, bu yüzden HERHANGİ bir kabuğun belirtilmesi daima ilkini çalıştırır. ssh -T user@hosthiç -T veya -t belirtmemekle aynıdır.

Şimdi, fark ederseniz, MY sistem sadece bir veya diğer iki dosyayı çalıştırmıyor. Ancak asıl posterin .bash_profile çalışan .bashrc'de bir satırı vardır, bu yüzden .bashrc ne olursa olsun her zaman çalışacaktır. Bu çizgiyi oraya koymalıydım! Bu çizgi olmasaydı, sorun yaşamayacaktınız.

Bir yönetici bulmanız veya başka bir yol bulmanız gerekir. Yöneticiler bunun için var.


Bazı iyi noktalar; Hiçbir çalıştırılabilir bir komut yardımcı olabilir gibi açıklamak gibi geçti, ama biraz tartışmalı noktada: eğer /bin/sh yaptığımız ilk yürütmek için olsun, bu olur yardım Bash çünkü vermez yük ~/.bashrcolarak çağrıldığında sh. Bu cevap, diğer cevabınızın yerine geçmiştir, bu yüzden lütfen diğerini silin.
mklement

3

Gibi bir şey:

ssh host "/bin/bash --norc"

bu da işe yarayacak gibi görünüyor, ancak PS1'in ayarlanmadığını unutmayın, bu yüzden komut istemini istemeden yazmanız gerekir.

Bunun yıkıcı olmama avantajı vardır.


1
Bu işe yaramıyor, ilk önce başarılı bir giriş yapmayı denedi, fakat giriş yapamadı ve bu nedenle bash --norc
Tom Ritter

2

Deneyin

echo ^C | ssh <hostname> ' rm .bashrc'

^ C orada kontrol-v sonra c


1
Sistemimdeki ctrl-v ve ctrl-c. Yine de teşekkürler! :)
mzuther

2
ssh -t user@host "bash --norc --noprofile -c '/bin/rm .bashrc'"

Bu benim için çok kısıtlı bir ortamda hiçbir şey yapmazken işe yaradı. .Bashrc dosyasının tam yolunu belirtmem gerekiyordu.
zbeekman

1

Mash ctrl-C, .bashrc çıkmadan önce bir ctrl-C alabildiğiniz sürece çalışır. Ne yazık ki, bu exit.bashrc erken ise , yapmak zor olabilir .

Bir ctrl-C'yi mümkün olan en kısa sürede doğrudan ssh'a bağlayarak yerleştirebilirsiniz:

{ echo ^C; cat /dev/tty; } | ssh -tt user@host

^CCtrl-V gibi yazıldığını ve ardından ctrl-C'yi yazdığınızı unutmayın .

Bu boruları tek bir ctrl-C izler ve bunu kontrol terminalinden gelen girdiler takip -tteder; Bunların hepsi, mümkün olduğu kadar .bashrc atlayarak uzak makinede size (biraz hatalı biçimlendirilmiş) bir kabuk verdiğini söyledi.


0

Komutu .bash_profilekullanarak, üzerine boş bir dosyanın üzerine yazmayı deneyebilirsiniz scp. Yaptıklarımdan itibaren, scp okumayan etkileşimli olmayan bir giriş kullanıyor .bash_profile.


Dizin yapısını yanlış hatırlamıyorsam (varsayımsal olarak) sürece ve bana bu konuda bir hata vermiyorsa, bu çalışmaz - scp da dosyaları çalıştırır.
Tom Ritter,

1
İnsanların farkına varmadıkları şey, scp'nin özel bir şey olmadığı; bu sadece ssh üzerinden çalışan başka bir komuttur - bu da scp ile etkileşimli bir ssh oturumu için gerçekleşen hemen hemen her şey anlamına gelir.
larsks

sftp hakkında ne, onun bir ssh alt sistemi afaik.
allo

0

Bashrc dosyasını da silebilirsiniz:

ssh <hostname> rm ~/.bashrc

Sorun, bashrc'de değil .bash_profile dosyasında.
Laurent Etiemble

1
Bu işe yaramaz - önce bir kabuk için çalışır ve başarısız olur.
Tom Ritter,

0

Sisteminiz normal şekilde kuruluysa, etkileşimli olmayan bir kabuk için (.bebir komut gibi) .bash_profile çalıştırılmaz.

Sorunun .bash_profile dosyasında olduğunu belirttiğiniz için, yoldan çıkarmayı deneyin:

ssh user@host "mv ~/.bash_profile ~/.bash_profile_broken"

Hangi dosyaların bağlantılı olduğunu düşünmedim - .bash_profile içerir .bashrc = (Daha fazla bilgi ekledim.
Tom Ritter

1
Ancak Lockie'nin önerdiği - bash man sayfası tarafından onaylanan - etkileşimli olmayan bir kabuğun .bashrc veya .bash_profile komutunu çalıştırmayacağıdır. Ancak, ssh komut satırında komutları geçirseniz bile (bu örnekte olduğu gibi), bash hala "etkileşimli" bir kabuk olarak başlatılır, bu da .bashrc dosyanızı okuyacağı anlamına gelir. Yani iyi bir fikir, ama ne yazık ki ssh işbirliği yapmaz.
larsks

0

UH = 'kullanıcı @ host'; ssh $ UH 'mv ~ / .bashrc ~ / letmein'; ssh $ UH

Bitirip gider, değişim etmeyin userve hostdaha sonra düzenleyebilir letmeinve farklı kaydet.bashrc


0

Kullanıcı60069 için Kudos, benim için çalıştı, ama ben kabuk özel başlangıç ​​dosyası .bashrc kullanıyorum, bu yüzden / bin / sh ile giriş benim için çalıştı.

Ancak, eğer "böyle şans yok" durumundaysanız, bu çözümü, kullanıcı 60069'lara ve Dennis W'nin çözümlerine dayanarak sunarım:

ssh -t you@host  /bin/bash --noprofile  --norc

Dennis W, birinin kendileri için çalışmadığını söylediği --norc seçeneğini önerdi.

Başlangıç ​​dosyalarını devre dışı bırakma seçenekleri için "man bash" veya "man (kabuğunuz)" komutunu çalıştırın. Sorunu çözmek için harcanan süre boyunca yalnızca kaba bir kabuk kullanmanız gerekir.


0

Sunucuya giriş yapmanın başka bir yolu profilsiz, lütfen aşağıdaki komutu bulun
ssh -t user@host bash --noprofile

Pem dosyasını kullanan ve başka bir kullanıcı olmayan AWS için
ssh -ti "YOUR-PEM-FILE-NAME.pem" ec2-user@YOUR-IP-ADDRESS bash --noprofile

Bu yardımcı olur umarım!


-1

Yukarıda verilen öneri ve yanıtlardan, bunun .bashrc veya .bash_profile dosyaları olmadığını söyleyebilirim. Ayrıca ssh manpage, yürütülecek bir komut belirtirseniz, profil dosyalarınızın okunmayacağını belirtir.

Mutlak yoldan farklı bir giriş kabuğu (ksh? Csh? Sh?) Çalıştırmayı denemenizi öneririm; Ayrıca, tamamen farklı bir sorun olabileceğine dikkat edin (kota? Ana dizininizde yürütme ve okuma?), bu nedenle bir yan yaklaşım daha iyi olurdu. Başka bir kullanıcıdan size bir e ls -la $YOUR_HOME_DIR-posta göndermesini ve sonucu posta göndermesini isteyebilir misiniz?

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.