Soru Belirli bir dizine doğrudan nasıl ulaşabilirim?


Sık sık birkaç sunucudan birine giriş yapmalı ve bu makinelerde birkaç dizinden birine gitmeliyim. Şu anda bu tür bir şey yapıyorum:

localhost ~] $ ssh Instagram Hesabındaki Resim ve Videoları somehost

Somehost'a hoş geldiniz!

somehost ~] $ cd / bazı / dizin / bir yere / adlandırılmış / Foo
somehost Foo] $

Hangi ana makineye ve hangi dizine girmem gerektiğini belirleyebilecek komut dosyalarım var ama bunu yapmanın bir yolunu çözemiyorum:

localhost ~] $ go_to_dir Foo

Somehost'a hoş geldiniz!

somehost Foo] $

Bunu yapmak için kolay, zeki ya da herhangi bir yolu var mı?


164
2018-03-09 14:50


Menşei




Cevaplar:


Aşağıdakileri yapabilirsiniz:

ssh -t xxx.xxx.xxx.xxx "cd /directory_wanted ; bash"

Bu şekilde, directory_wanted'de bir kabuk elde edersiniz.


açıklama

  -t      Force pseudo-terminal allocation.  This can be used to execute arbitrary screen-based programs on a remote machine, which can be very useful, e.g. when implementing menu services.
          Multiple -t options force tty allocation, even if ssh has no local tty.
  • Eğer kullanmazsan -t o zaman hiçbir uyarı görünmez.
  • Eklemezseniz ; bash Daha sonra bağlantı kapatılır ve yerel makinenize kontrol geri döner

304
2018-03-09 14:59



Benim durumumda -t eksik kısmı - Mathieu
Bu yaklaşımı kullanırken .bash_profile okunmuyor, kimse neden olduğunu biliyor? - Filipe
Bunu yapmak zorundaydım: ssh -t xxx.xxx.xxx.xxx "cd /directory_wanted && exec \$SHELL" - guptron
Genellikle bir giriş kabuğu istersiniz: ssh -t example.com "cd /foo/bar; exec \$SHELL -l" - christianbundy
Sadece bağlantı kurmak istedim dizini ssh girişinde otomatik olarak değiştir - Sunucu Hatası; ve oradan da bu komutu yapıştırın (ki bu, @christianbundy'nin bir versiyonudur): ssh server -t "cd /my/remote/directory; bash --login" - sdaau


Ekleyebilirsiniz

cd /some/directory/somewhere/named/Foo

senin için .bashrc dosya (veya .profile ya da başka ne diyorsun? Bu şekilde, ne yaparsanız yapın ya da nerede olursanız olun ssh o sunucuya her giriş yaptığınızda cd Sizin için doğru dizine ve yapmanız gereken tek şey ssh normal gibi.

Lanet olsun, rogeriopvl'in çözümü de işe yarıyor, ama bu biraz daha ayrıntılı, ve her seferinde (takma ad yapmazsanız) yapmayı hatırlamanız gerekiyor, bu yüzden biraz daha az "eğlenceli" görünüyor.


43
2018-03-09 15:22



+1, X dizgisine bağlandığınızda hangi dizine gideceğinizi her zaman hatırlamanız yerine ssh komutunu yapmak yerine sabit dizine ihtiyacınız varsa bu daha uygun görünüyor - Tebe


SSH ve CD'ye ardarda bir sunucuya bir araç oluşturdum - uygun şekilde adlandırılmış sshcd. Verdiğiniz örnek için şunları kullanırsınız:

sshcd somehost:/some/directory/somewhere/named/Foo

Herhangi bir sorunuz veya sorununuz olursa lütfen bize bildirin!


17
2018-02-12 11:33



~ / .Ssh / config içine yeni bir konfigürasyon tanımlayabilir ve oradan okuyabilirseniz harika olurdu;) - Alexar
@Alexar github.com/fraction/sshcd/issues :) - christianbundy


CDPATH ortam değişkenini kullanıyorum


2
2018-03-09 15:05



Sadece makine başına bir diziyle ilgilenseydim kullanışlıdır. Uzak makineye bilgi aktarmanın bir yoluna ihtiyacım var. Roger'ın çözümü sadece bunu yapar. - Frosty


Giriş yaptıktan sonra doğrudan gitmenin bir başka yolu "Takma Ad" oluşturur. Sisteminize giriş yaptığınızda, sadece bu takma adı yazın ve o dizinde olacaksınız.

Örnek: Alias ​​= myfolder '/ var / www / Folder'

Sisteminize giriş yaptıktan sonra bu takma ad (bu, sistemin herhangi bir bölümünden çalışır)
Bu komut, bashrc'de değilse geçerli oturum için çalışacaktır. Dolayısıyla, gelecekte bu takma adı kullanmak için bu takma adı bashrc'e de ekleyebilirsiniz.

$ myfolder => sizi bu klasöre götürür


1
2017-11-18 21:30





Benim çok özel durumumda, uzak bir hostta bir Jenkins slave makinesinden belirli bir dizinin içinde bir komut çalıştırmak istedim:

ssh myuser@mydomain
cd /home/myuser/somedir 
./commandThatMustBeRunInside_somedir
exit

Ama makinem ssh'yi gerçekleştiremedi (bu, sözde bir parça tahsis edemedim) ve şu hatayı vermeme devam etti:

Pseudo-terminal will not be allocated because stdin is not a terminal

Ssh komutunun bir parametresi olarak (bir sözde terminali tahsis etmek zorunda kalmadan) "cd to dir + my command" komutunu ileterek ve -t seçeneğinin ssh komutunu açık bir şekilde söylemesiyle -t Sözde terminal tahsisine gerek yok.

ssh -T myuser@mydomain "cd /home/myuser/somedir; ./commandThatMustBeRunInside_somedir"

1
2018-06-13 15:45





@ Rogeriopvl'in cevabına yapılan eklemelere dayanarak aşağıdakileri öneriyorum:

ssh -t xxx.xxx.xxx.xxx "cd /directory_wanted && bash"

Tarafından zincirleme komutları && Bir sonraki komutu sadece bir öncekinin başarılı olduğu zaman çalıştırır. ;komutları sırayla yürütür). Bu özellikle gerektiğinde kullanışlıdır cdkomutu gerçekleştiren bir dizine.

Aşağıdakileri yaptığınızı hayal edin:

/home/me$ cd /usr/share/teminal; rm -R *

Rehber teminal Bu, ana dizinde kalmanıza ve aşağıdaki komutu içeren tüm dosyaları silmenize neden olmaz.

Eğer kullanırsan &&:

/home/me$ cd /usr/share/teminal && rm -R *

Dizin bulamadıktan sonra komut başarısız olur.


0
2017-12-14 09:20