Skip to content

securecrt commands manager e komut listesi eklemek

ağ yönetiminde ssh client uygulaması olarak securecrt oldukça popülerdir. eğer sizde securecrt kullanıyor ve kullanmayı planlıyorsanız network yönetimi sırasında commands manager aracı oldukça işinize yarayacaktır.

commands manager altıda istediğiniz komut tanımlamalarını yapabiliyor ve tek tıkla bu komutu aktif oturuma gönderebilirsiniz.. tasarım sırasında ağaç yapısı desteklemesi sayesinde kategorize edilmiş olarak komutları ekleyebilirsiniz…

tüm ihtiyacınız olabilecek komutları tek tek eklemez biraz yorucu olabilir.. bu noktada hazırladığım python scripti paylaşmacağım.. öncelikle ekleyeceğimiz komutları aşagıdaki formatta excel dosyasında hazırlıyoruz. vendor ve category olarak bir ağaç yapısı tasarladık.

commands.xlsx

Vendor Category Command
nokia bgp show router bgp summary
nokia bgp show router bgp neighbor
nokia switch show ethernet-service port 1/3
huawei display ip interface brief
zte show ip interface brief loopback0

xml_create.py

import pandas as pd
import xml.etree.ElementTree as ET
from xml.dom import minidom

def create_securecrt_xml(excel_file_path, output_xml_path):
    # Excel dosyasını oku ve NaN değerleri boş string ile değiştir
    df = pd.read_excel(excel_file_path).fillna("")
    
    # Ana XML yapısını oluştur
    root = ET.Element("VanDyke", version="3.0")
    commands_root = ET.SubElement(root, "key", name="Commands")
    
    # Vendor gruplarına göre işle
    for vendor in df["Vendor"].unique():
        if not vendor:  # Vendor boşsa atla
            continue
            
        vendor_key = ET.SubElement(commands_root, "key", name=str(vendor))
        
        # Kategoriye göre komutları grupla
        vendor_data = df[df["Vendor"] == vendor]
        for category in vendor_data["Category"].unique():
            if pd.isna(category) or category == "":  # Kategori boşsa genel komutlara ekle
                continue
                
            category_data = vendor_data[vendor_data["Category"] == category]
            category_key = ET.SubElement(vendor_key, "key", name=str(category))
            commands_key = ET.SubElement(category_key, "key", name="__Commands__")
            default_array = ET.SubElement(commands_key, "array", name="Default")
            
            # Komutları ekle
            for _, row in category_data.iterrows():
                if not row["Command"] or pd.isna(row["Command"]):
                    continue
                command_str = f"SEND,{row['Command']},{row['Command']},,,0,1,{row['Command']},"
                ET.SubElement(default_array, "string").text = command_str
        
        # Vendor için genel komutlar (kategori yoksa)
        general_commands = vendor_data[vendor_data["Category"].isna() | (vendor_data["Category"] == "")]
        if not general_commands.empty:
            commands_key = ET.SubElement(vendor_key, "key", name="__Commands__")
            default_array = ET.SubElement(commands_key, "array", name="Default")
            for _, row in general_commands.iterrows():
                if not row["Command"] or pd.isna(row["Command"]):
                    continue
                command_str = f"SEND,{row['Command']},{row['Command']},,,0,1,{row['Command']},"
                ET.SubElement(default_array, "string").text = command_str
    
    # XML'i düzgün formatla ve kaydet
    xml_str = ET.tostring(root, encoding="utf-8")
    dom = minidom.parseString(xml_str)
    # toprettyxml encoding="utf-8" belirtilirse bytes döndürür, biz manuel yazıyoruz
    body = dom.toprettyxml(indent="\t")
    # toprettyxml'in ürettiği ilk satırı (<?xml ...?>) çıkar, yerine istediğimizin koy
    lines = body.splitlines()
    lines[0] = '<?xml version="1.0" encoding="UTF-8"?>'
    # Boş satırları temizle (toprettyxml bazen ekstra boş satır ekler)
    clean_lines = [l for l in lines if l.strip() != ""]
    pretty_xml = "\n".join(clean_lines) + "\n"
    
    with open(output_xml_path, "w", encoding="utf-8") as f:
        f.write(pretty_xml)

if __name__ == "__main__":
    excel_file_path = "commands.xlsx"  # Excel dosyası yolu
    output_xml_path = "securecrt_commands.xml"  # Çıktı XML dosyası yolu
    create_securecrt_xml(excel_file_path, output_xml_path)
    print(f"XML dosyası oluşturuldu: {output_xml_path}")

excel ve python dosyasını ayını dizinde olacak şekilde çalıştırırsak aynı dizinde securecrt_commands.xml adından bir xml dosyası oluşturulacaktır.

<?xml version="1.0" encoding="UTF-8"?>
<VanDyke version="3.0">
	<key name="Commands">
		<key name="nokia">
			<key name="bgp">
				<key name="__Commands__">
					<array name="Default">
						<string>SEND,show router bgp summary,show router bgp summary,,,0,1,show router bgp summary,</string>
						<string>SEND,show router bgp neighbor,show router bgp neighbor,,,0,1,show router bgp neighbor,</string>
					</array>
				</key>
			</key>
			<key name="switch">
				<key name="__Commands__">
					<array name="Default">
						<string>SEND,show ethernet-service port 1/3,show ethernet-service port 1/3,,,0,1,show ethernet-service port 1/3,</string>
					</array>
				</key>
			</key>
		</key>
		<key name="huawei">
			<key name="__Commands__">
				<array name="Default">
					<string>SEND,display ip interface brief,display ip interface brief,,,0,1,display ip interface brief,</string>
				</array>
			</key>
		</key>
		<key name="zte">
			<key name="__Commands__">
				<array name="Default">
					<string>SEND,show ip interface brief loopback0,show ip interface brief loopback0,,,0,1,show ip interface brief loopback0,</string>
				</array>
			</key>
		</key>
	</key>
</VanDyke>

xml dosyası oluşturktan sonra aşagıdaki adımları izlerek xml dosyasını securecrt içine import edeceğiz.

github deposu için

https://github.com/ferhatcicek/securecrt-commands-manager-xml-create

securecrt hiyerarşik yapıda log tutmak

vbs,python gibi scriptleri desteklemesi nedeniyle en sık kullanılan ssh client uygulamalarında bir tanesi durumda securecrt.

securecrt nin güzel özelliklerden bir taneside yapılan tüm işlemlerini hiyerarşik şekilde log tutabilmenizdir. bunun için yapılması gereken “edit default session options” altında log file dosyasına ait konfigürasyonu yapmalısınız.

açılan pencede “start log upon connect” seçerek securecrt çalışmaya başladı anda aktif olmasını sağlıyoruz. log dosya ismini oluşturuken program tarafından desteklenen dosya isim formatlarını kullanabiliyorsunuz. benim kullanmakta olduğun versiyon için kullanılabilecek parametler aşagıdaki şekilde tanımlanmış.

%H - hostname
%H - hostname (not valid with protocols that do not specify a host, such as Serial)
%S - session name
%Y - four-digit year
%y - two-digit year
%M - two-digit month
%D - two-digit day of the month
%P - port (not valid with protocols that do not specify a port, such as RLogin)
%h - two-digit hour
%m - two-digit minute
%s - two-digit seconds
%t - three-digit milliseconds
%F - directory path starting below the "Sessions" folder
%% - percent (%)
%envvar% - environment variable

bu parametreleri kullanarak istediğiniz formatta log dosyaları oluşturabilirsiniz. ben yıl/ay/gün/hostname-saat klasör yapısını kullandım.

D:\securecrt\log\%Y\%M\%D\%H_%h-%m-%s.log

ssh bağlantısında hesap değişim algoritmasının kullanılması

komut satırından ssh kullanmaya yeni başladıysanız aşagıdakine benzer hatalar ile karşılaşırsanız bunun nedeni sunucu tarafından bir hesap değişim algoritmasının aktif eilmiş olmasındandır.

# ssh  -p 3333 sshuser@ferhatcicek.com
Unable to negotiate with 10.66.26.35 port 3333: no matching key exchange method found. Their offer: diffie-hellman-group1-sha1,diffie-hellman-group14-sha1

peki bu durumda ne yapacaksınız. yukarıdaki çıktıda diffie hellman algoritmasının kullanıldığı belirtiliyor. ssh bağlantısında parametre olarak bunu belirmemiz gerekmektedir.

# ssh -oKexAlgorithms=+diffie-hellman-group1-sha1 -c 3des-cbc -p 3333 sshuser@ferhatcicek.com 

komutu eksiksiz olarak yazdıysak aşagıdaki şekilde bir çıktı ile karşılacağız..

The authenticity of host '[ferhatcicek.com]:3333 ([10.66.26.35]:3333)' can't be established.
RSA key fingerprint is SHA256:NHXQ1no3z/Z2e/KoqrKyn0vNKlYhKmhvhtsQFXS4rvk.
Are you sure you want to continue connecting (yes/no/[fingerprint])?

yes yazarak kabul ettikten sonra ne bağlantı gerçekleşmiş olacak

ssh root erişimini engelleme

en temel güvenlik ihtiyaçlarından bir tanesidir root kullanıcısının ssh ile bağlantısının engellenmesi.

$ sudo nano /etc/ssh/sshd_config

ssh konfigürasyon dosyasını açıyoruz ve PermitRootLogin ve PasswordAuthentication parametlerini no olarak değiştiriyoruz.

PermitRootLogin no
PasswordAuthentication no

sonrasında takibi sunucumu yeniden başlatmayı ihmal etmiyoruz.

sudo service ssh restart

ubuntu üzerinde ssh sunucu

ubuntu üzerinde ssh sunucuyu aktif etmek istiyorsanız openssh-server i kurmak yeterli olacaktır.

fcicek@ubuntu:~$ sudo apt-get install openssh-server

sunucunun aktif olduğunun kontrollerini yapalım.

fcicek@ubuntu:~$ ps -aux|grep sshd
root        472  0.0  0.5  72136  5656 ?        Ss   09:31   0:00 /usr/sbin/sshd -D
root       1268  0.0  0.7 105604  7044 ?        Ss   09:36   0:00 sshd: fcicek [priv]
fcicek     1292  0.0  0.4 105604  4608 ?        S    09:36   0:00 sshd: fcicek@pts/0
fcicek     1467  0.0  0.1  14352  1168 pts/0    S+   09:44   0:00 grep --color=auto sshd

raspberry nin ilk kurulumunda ssh aktif edilmesi

raspberry üzerine monitor ve klavye kullanmadan raspbian kurmak – kullanmak istiyorsanız ve boot sırasında ssh  aktif olmuyor diyorsanız yapmanız gereken kullandığınız sd card içine girerek config.txt dosyasının yer aldığı klasör (/boot) içine “ssh” isimli bir dosya oluşturarak içine ssh yazarak kaydedin.

raspberry in ilk açılış sırasında ssh artık aktif olacaktır. login olduktan sonra istediğiniz değişiklikleri yapabilirsiniz..

 

wetty : http/https üzerinden web browser terminal

web browser üzerinden terminal ihtiyacı her ne kadar çok tercihimiz olsada ısrar eden elbet birileri olacaktır. geçici olarak bu ihtiyacı karşılamak istersek wetty işimi görecektir. öncelikle ihtiyacımız olan araçları sistemimize yükleyelim.
git, nodejs ve npm i sırasıyla yüklelim.

fcicek@cicek:~$  sudo apt-get install git 
fcicek@cicek:~$  sudo apt-get install nodejs 
fcicek@cicek:~$  sudo apt-get install npm 

şimdi sıra wetty nin git ile clone lanmasına geldi.

fcicek@cicek:~$ git clone https://github.com/krishnasrinivas/wetty

başarılı indirme işlemi sonrası kurma işlemini yapalım.

fcicek@cicek:~$ cd wetty/
fcicek@cicek:~/wetty$ sudo npm install 
 

kurulum gerçekleşti. şimdi sıra yeni bir socket üzerinden uygulamamız başlatalım. bu örnekte 3000 kullanmaya karar verdik..

fcicek@cicek:~/wetty$ sudo node app.js -p 3000

eger http yerine https kullanmak istiyorsak

fcicek@cicek:~/wetty$ sudo  node app.js --sslkey key.pem --sslcert cert.pem -p 3000 

olarak kullanabiliriz. şimdi browserimiz açalım ve gerekli testlerimiz yapalım. adres satırımıza http://localhost:3000 yazalım ve ekran görüntümüz

wetty1

cli üzerinden bağlantı durumlarının loglarıda incelenebilir.

Sun Nov 15 2015 22:00:41 GMT+0200 (EET) Connection accepted.
Sun Nov 15 2015 22:00:41 GMT+0200 (EET) PID=5042 STARTED on behalf of user=
Sun Nov 15 2015 22:22:25 GMT+0200 (EET) PID=5042 ENDED
Sun Nov 15 2015 22:22:29 GMT+0200 (EET) Connection accepted.
Sun Nov 15 2015 22:22:29 GMT+0200 (EET) PID=6597 STARTED on behalf of user=
Sun Nov 15 2015 22:27:30 GMT+0200 (EET) Connection accepted.
Sun Nov 15 2015 22:27:30 GMT+0200 (EET) PID=7265 STARTED on behalf of user=

raspberry pi – raspbian ssh aktif edilmesi

raspberry ile çalışıyorsanız ssh in aktif olması olmazsa olmazlardan biridir. şimdi raspberry üzerine ssh sunucusu nasıl aktif edeceğimize bakalım.

raspberry nin konfigürasyon arayüzünü aktif çalıştıralım. bu arayüz ile konfigürasyon dosyaları ile uğraşmaya gerek kalmayacak. yazılım sürümüne göre ekran görüntüleri farklılık gösterebilir.

pi@raspberrypi ~ $ sudo raspi-config

açılan arayüzden “advanced options” seçilir

raspiconfigssh1

yeni açılan pencereden ssh seçilerek
raspiconfigssh2

açılan pencereler takip edilerek ssh aktif edilir.

raspiconfigssh3

raspiconfigssh4

ssh ımız aktif oldu. artk arayüzden “finish” diyerek çıkabilir.

raspiconfigssh5

arayüzden çıktıktan sonra komut satırını aşagıdaki şekilde göreceğiz.

pi@raspberrypi ~ $ sudo raspi-config 
update-rc.d: using dependency based boot sequencing
[ ok ] Starting OpenBSD Secure Shell server: sshd.

herşey güzel.. gerçekten ssh sunucumuz aktif mi kontrol edelim.

pi@raspberrypi ~ $ /etc/init.d/ssh status 
[ ok ] sshd is running.

ile sunucumuzun çalıştığı bilgisi alıyoruz. ip bilgisini ögrenelim ve gerçek bağlantı testimizi yapalım.

pi@raspberrypi ~ $ ifconfig
eth0 Link encap:Ethernet HWaddr 11:11:11:11:11:11
 inet addr:192.168.2.37 Bcast:192.168.2.255 Mask:255.255.255.0
 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
 RX packets:777 errors:0 dropped:1 overruns:0 frame:0
 TX packets:557 errors:0 dropped:0 overruns:0 carrier:0
 collisions:0 txqueuelen:1000 
 RX bytes:60040 (58.6 KiB) TX bytes:89779 (87.6 KiB)

bundan sonra ssh bağlantımızı yapalım…

[c:\~]$ ssh pi@192.168.2.37


Connecting to 192.168.2.37:22...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.

Linux raspberrypi 3.18.11+ #781 PREEMPT Tue Apr 21 18:02:18 BST 2015 armv6l

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Tue Jun 30 20:39:17 2015 from fcicek.local


pi@raspberrypi ~ $

artık raspberry de diğer işlerle uğraşabiliriz.

alcatel sros cpm filter ile ip bloğuna ssh engeli

belirli bir ip bloğunu ssh erişimine kapatmak istersek bunu cpm-filter üzerinden yapabiliriz.

*A:alcatel_sros>config>sys>security# cpm-filter
*A:alcatel_sros>config>sys>security>cpm-filter# ip-filter
*A:alcatel_sros>config>sys>sec>cpm-filter>ip-filter# entry 10 create
*A:alcatel_sros>cfg>sys>sec>cpm>ip-filter>entry# action drop
*A:alcatel_sros>cfg>sys>sec>cpm>ip-filter>entry# match protocol tcp dst-port 22 65535
*A:alcatel_sros>cfg>sys>sec>cpm>ip-filter>entry# match src-ip 10.10.10.0/24	
*A:alcatel_sros>cfg>sys>sec>cpm>ip-filter>entry# exit
*A:alcatel_sros>cfg>sys>sec>cpm-filter>ip-filter# exit	

*A:alcatel_sros>config>sys>security>cpm-filter#info 
----------------------------------------------	
                    entry 10 create
                        action drop
                        match protocol tcp
                            dst-port 22 65535
                            src-ip 10.10.10.0/24
                        exit
                    exit
----------------------------------------------		

burada yapılan işlem 10 entry id ile bir filtre oluşturuldu. tcp protokolü üzerinden ssh in kullandığı 22. portu 10.10.10.0/24 bloguna kapatmak oldu. action satırında accept, drop, queue parametrelerine izin verilmektedir. match kısmının basit bir mantığı var. daha fazla detay için alcatelin sros dokümanlarına bakılmasında fayda var.

sros entry id sine göre kontrol yapılmaktadır. bu nedenle entrylerinizi sık sık güncellemek istemiyorsanız önceden bir plan oluşturmanızda fayda var.

Alcatel SR OS larda telnet, ssh servis kontrolü

Alcatel network ekipmanlarından SROS kullananlarda cihaz üzerinde hangi servislerin açık olduğunu ve bağlanılabileceğini system information komutu ile elde edebiliriz.

*B:PE1# show system information

===============================================================================
System Information
===============================================================================
System Name : PE1
System Type : 7750 SR-12
System Version : C-9.0.R15
System Contact :
System Location : Turkey
System Coordinates : Istanbul
System Active Slot : A
System Up Time : 438 days, 11:00:01.27 (hr:min:sec)

SNMP Port : 169
SNMP Engine ID : 000019000100110
SNMP Engine Boots : 2
SNMP Max Message Size : 9216
SNMP Admin State : Enabled
SNMP Oper State : Enabled
SNMP Index Boot Status : Persistent
SNMP Sync State : OK

Tel/Tel6/SSH/FTP Admin : Disabled/Disabled/Enabled/Enabled
Tel/Tel6/SSH/FTP Oper : Down/Down/Up/Up

Back To Top