MacOS’ta ssh tünel açan script

Daha önce ssh tünel olup olmadığına bakmak gerekiyor.


#!/bin/bash
echo "Looking if tunnel is running in the background."
pid=$(ps -ef | grep "4999:10.0.0.99:4999" | grep -v grep | cut -d" " -f6)
if [[ -n $pid ]]; then
echo "Previous ssh tunnel detected."
echo "Killing ssh process: "+$pid
kill $pid
fi
echo "Creating ssh tunnel."
ssh -L 4999:10.0.0.99:4999 -fNC root@myserver.com
echo "Successfully created ssh tunnel."

Changing mount point of Xsan filesystems on MacOSX 10.7 Lion

On MacOSX, when you plugin a volume via USB, FireWire, or fibrechannel, it is automatically mounted under /Volumes directory. But this creates a problem between Linux  and MacOS software like Autodesk wiretapgateway. For example, you have a file under Linux:

/san1/myquicktime.mov

On MacOSX, these would automatically mount under:

/Volumes/san1/myquicktime.com

And this will be a problem, between flame_linux and mac_wiretapgateway applications. We have a Mac WTG server, which is a SAN client and has a RedRocket card. And this is the best platform for us, to run wiretapgateway application.

To change this mount point, we edited the file

/Library/Preferences/Xsan/automount.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>san1</key>
        <dict>
                <key>AutoMount</key>
                <string>rw</string>
                <key>MountOptions</key>
                <dict/>
        </dict>
</dict>
</plist>

We just need to add keyword “At” then we define string “/san1” to the XML file.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>san1</key>
        <dict>
                <key>At</key>
                <string>/san1</string>
                <key>AutoMount</key>
                <string>rw</string>
                <key>MountOptions</key>
                <dict/>
        </dict>
</dict>
</plist>

After changing the SAN config, unmount and mount san1 volume.

wtg1:Xsan root# df -h
Filesystem         Size   Used  Avail Capacity  Mounted on
/dev/disk0s2      931Gi  7.1Gi  923Gi     1%    /
devfs             195Ki  195Ki    0Bi   100%    /dev
map -hosts          0Bi    0Bi    0Bi   100%    /net
map auto_home       0Bi    0Bi    0Bi   100%    /home
/dev/disk11        85Ti   26Ti   59Ti    31%    /san1

Bir SSH server arkasındaki bilgisayarların istenilen portuna bağlanmak

Uzun süredir şirketlerde internet üzerinden ssh ile bağlanabileceğimiz linux makineler mevcut. Ancak şirketteki diğer makinelere bağlanmak için önce bu makineye bağlanıp, sonra diğer makinelere SSH yapıyoruz. Tabii bu SSH yapmak için çoğu durumda yeterli bir sistem. Ama ya SSH server arkasındaki herhangi bir işletim sistemine sahip bir makine üzerindeki bir servise bağlanmak istersek? Örnek servisler:

  • VNC server
  • http server

Tek yapmamız gereken şey, internet üzerinde şirketteki servera bir SSH bağlantısı yapmak… Bunu yaparken de, şirket içinde hangi bilgisayarın, hangi portunu SSH üzerinden tünel ile taşıyacağımızı belirtmek. Kulağa karışık geliyor, ancak aslında çok basitçe tek satırda hallolan çok basit bir işlem.

ssh -L 3000:10.0.0.12:80 root@myserver.company.com

Burada yazdığımız satır şu demek: -L ile şirketimizdeki local networkte hangi bilgisayarın hangi portunu nereye yönlendirmek istediğimizi yazıyoruz. Örnekteki 3000, kendi laptopumuzun portu. 80 ise, şirkette çalışan 10.0.0.12 IP adresine sahip bir bilgisayarın http servisi, root@myserver.company.com ise, hangi kullanıcı ile şirketimizdeki internet bağlantısı sağlayan servera bağlanacağımızı belirtiyor. Bu satırı yazdıktan sonra, kullanıcı şifresini yazarak login oluyoruz. Sonra da internete bağlandığımız laptop’tan http://localhost:3000 yazdığımız zamansa, aslında şirkette duran 10.0.0.12 adresli bilgisayarın 80 nolu portunda çalışan http servisine bağlanmış oluyoruz. Tabii bu işlem ne kadar güvenli? SSH kadar güvenli. Arada taşınan tüm veri SSH ile encrypted şekilde taşınıyor. Araya girip ISP’miz üzerinden veri transferi dinlenilse de, aslında taşınılan verinin çözülmesi oldukça zor.

Bu arada, bu yöntemi MacOSX 10.6 ile test ettim. Karşıdaki server is rhel6 idi. Aynı işlemin Putty ile, windows bir makine ile de yapılması mümkün. Sadece tunnelin ayarlarını putty ile yapmak lazım.

Bir de RDP (Windows Remote Desktop) bağlantısı yapmak mantıklı oluyor. Onun için de yönlendirilmesi gereken RDP portu 3389

ssh -L 3389:10.0.0.120:3389 -fNC root@myserver.company.com

MacOSX 10.6 makineden CoRD kullanarak çok kolaylıkla bu tünelin çalıştığını test ettim. Bu yazılım çok iyi bir RDP clientı: http://cord.sourceforge.net/

Linux’ta hardware clock’u sistem tarihine eşlemek

Aşağıdaki komut ile sistemin donanım saatini görüntüleyebiliyoruz.

[root@ftpserver etc]# hwclock --show
Thu 12 Jan 2012 03:21:26 PM EET -0.825080 seconds

Bu komut ile de donanım saatini (BIOS’taki), sistem tarihine sync edebiliyoruz:

[root@ftpserver etc]# hwclock -w --systohc

Linux bir makinede screen ile 2 kişinin beraber ssh ile çalışmak

2 sysadmin aynı anda bir makineye uzaktan bağlanıp, birbirinin ne yazdıklarını görerek çalışmak isterlerse, tek yapılması gereken şudur:

1. Sisteme giren ilk kişi (root olarak), ‘screen’ komutunu yazıp, uygulamayı çalıştırır.
2. Sisteme sonradan giren sysadmin de, ‘screen -x’ yazarak aynı ekrana bağlanır.

Screen’den çıkmak istenildiğinde, CTRL+D yazarak çıkmak en kolay yol. Bunun haricinde, CTRL+A sonrasında ? yazmak help ekranını gösteriyor.