Emacs Tramp SSH Hostname Tamamlama

Ssh ile baglandigim makineleri kategorilerine göre farklı dosyalarda tutup ~/.ssh/config dosyasında Include ile tanımlıyorum. Aşağıdaki gibi bir tanımlama güzel oluyor

# ~/.ssh/ssh_config_company1
Host top-secret-prod-host
  Hostname prod.example.com
  User root
  
# ~/.ssh/ssh_config_company2
Host top-secret-dev-host
  Hostname dev.example.com
  User root

# ~/.ssh/config
Include ssh_config_company1
Include ssh_config_company2

Fakat emacs tramp ile sunuculara erişmeye çalıştığım zaman makine isimlerinin otomatik tamamlanmadığını farkettim. İsmi tam yazıp bağlandığımda güzelce çalışıyor, fakat TAB ile tamamlamaya çalıştığımda bir tepki alamıyordum. Biraz araştırdıktan sonra bir sonuç elde edemedim. Ya herkes bunun çözümünü biliyordu ya da ben doğru anahtar kelimeleri kullanmamıştım. Sonunda ilgisizi bir stackoverflow postunda aşağıdaki kod parçasını gördüm. Denediğimde işe yaradı.

(tramp-set-completion-function
 "ssh"
 '((tramp-parse-sconfig "/etc/ssh_config")
   (tramp-parse-sconfig "~/.ssh/config")))

Benzer bir problemde işinizi görebilir.


Genius!

Scp ile sembolik linkleri takip etmeden indirme işlemi yapmak için araştırma yaptığımda, aşağıdaki kodu buldum. Böyle bir kullanım 40 yıl düşünsem aklıma gelmezdi.

cd /destination/directory
ssh user@remote.host "cd /original/directory; tar cf - ./" | tar xvf -

Kaynak


SSH Filesystem ile uzak makinadaki dizini yerele bağlamak

Eğer linux kullanıyorsanız ve herhangi bir uzak makinaya ssh erişimi hakkınız varsa, ssh protokolü kullanarak uzak makinanın herhangi bir dizinini sanki kendi harddiskinizdeymiş gibi kullanabilirsiniz. Ben daha önce bahsettiğim internet canavarı :) için bu sistemi kullanıyorum. Ekran kartı pek iyi olmadığı için film izlerken sorun çıkartıyordu(özellikle alt yazılı filmlerde senkron sorunu oluyordu). Ve film arşivim o makinada olduğu için her seferde http protokolü üzerinden filmi kendi makinama çekip izlemek zor geliyordu. Kullanacağımız programın adı sshfs yani SSH Filesystem. Kurulum:

  • Debian && Ubuntu && vb.
aptitude install sshfs
  • Kaynak koddan derleme
./configure
make
make install # root yetkileriyle
  • Kullanımı - Uzak makinadaki bir dizini bağlamak
    sshfs hostname:dizin bağlamanoktası (root yetkileriyle)
    
  • Umount - Bağı koparma
    umount bağlamanoktası
    # ya da
    fusermount -u bağlamanoktası
    

Bu şekide kullanırsanız bağladığınız dizine ancak root yetkileriyle ulaşabilirsiniz. Her kullanıcının tüm haklarla(hangi kullanıcı ile ssh bağlantısı gerçekleştirdiyseniz onun haklarına sahip oluyosunuz) bağladığınız dizini kulanabilmesini istiyorsanız

sshfs -o allow_other hostname:dizin bağlamanoktası

Parametreler -o parametresini kullanarak uid ve gid değerlerini ayarlayabilirsiniz.

-o idmap=user
-o uid=<uid>
-o gid=<gid>
-o ro # read only - salt okunur mod

fstab dosyasını kullanarak mount etme

sshfs#USERNAME@REMOTE_HOST:REMOTE_PATH MOUNT_POINT fuse SSHFS_OPTIONS 0 0

örnek

sshfs#guest@guest.login.com:data /mnt/guest fuse uid=1003,gid=100,umask=0,allow_other 0 0