SSHTUNNEL(1) sshtunnel SSHTUNNEL(1)

python-sshtunnel - ایجاد تونل‌های SSH از طریق درگاه ریموت

[image: CircleCI] [image]
https://circleci.com/gh/pahaz/sshtunnel [image: AppVeyor] [image]
https://ci.appveyor.com/project/pahaz/sshtunnel [image: Documentation Status] [image]
http://sshtunnel.readthedocs.io/en/latest/?badge=latest [image: coveralls] [image]
https://coveralls.io/github/pahaz/sshtunnel?branch=master [image: version] [image]
https://pypi.python.org/pypi/sshtunnel

[image: pyversions] [image]
[image: license] [image]
https://github.com/pahaz/sshtunnel/blob/master/LICENSE

?Bنویسنده?P: Pahaz https://github.com/pahaz

?Bمخزن?P: https://github.com/pahaz/sshtunnel

الهام‌گرفته از https://github.com/jmagnusson/bgtunnel، که روی Windows کار نمی‌کند.

همچنین ببینید: https://github.com/paramiko/paramiko/blob/master/demos/forward.py

بسته sshtunnel https://pypi.python.org/pypi/sshtunnel در PyPI موجود است، بنابراین برای نصب آن در محیط خود کافی است دستور زیر را اجرا کنید:

pip install sshtunnel

یا

easy_install sshtunnel

یا

conda install -c conda-forge sshtunnel

برای نصب از کد منبع، مخزن https://github.com/pahaz/sshtunnel را کلون کرده و اجرا کنید:

python setup.py install

به منظور اجرای آزمون‌ها ابتدا به tox https://testrun.org/tox/latest نیاز دارید، سپس اجرا کنید:

python setup.py test

یکی از سناریوهای متداول که ?Bsshtunnel?P در آن مفید است در شکل زیر به تصویر کشیده شده است. ممکن است کاربر نیاز داشته باشد به پورتی از یک سرور ریموت (مثلاً ۸۰۸۰) متصل شود، در حالی که فقط پورت SSH (معمولاً پورت ۲۲) در دسترس است.

----------------------------------------------------------------------
                            |
-------------+              |    +----------+
    LOCAL    |              |    |  REMOTE  | :22 SSH
    CLIENT   | <== SSH ========> |  SERVER  | :8080 web service
-------------+              |    +----------+
                            |
                         FIREWALL (only port 22 is open)
----------------------------------------------------------------------

?Bشکل ۱?P: نحوه اتصال به یک سرویس مسدودشده توسط فایروال از طریق تونل SSH.

در صورت مجاز بودن توسط سرور SSH، همچنین امکان دسترسی به یک سرور خصوصی (از دیدگاه ?BREMOTE SERVER?P) که مستقیماً از بیرون (دیدگاه ?BLOCAL CLIENT?P) قابل مشاهده نیست وجود دارد.

----------------------------------------------------------------------
                            |
-------------+              |    +----------+               +---------
    LOCAL    |              |    |  REMOTE  |               | PRIVATE
    CLIENT   | <== SSH ========> |  SERVER  | <== local ==> | SERVER
-------------+              |    +----------+               +---------
                            |
                         FIREWALL (only port 443 is open)
----------------------------------------------------------------------

?Bشکل ۲?P: نحوه اتصال به ?BPRIVATE SERVER?P از طریق تونل SSH.

رابط برنامه‌نویسی (API) هم امکان مقداردهی اولیه تونل و راه‌اندازی آن را فراهم می‌کند و هم استفاده از یک زمینه (context) ?Bwith?P، که خود وظیفه راه‌اندازی ?Bو متوقف کردن?P تونل را بر عهده می‌گیرد:

کد متناظر با ?Bشکل ۱?P در بالا به شرح زیر است، با فرض اینکه آدرس سرور ریموت ?Bpahaz.urfuclub.ru?P باشد، از احراز هویت با گذرواژه استفاده شود و پورت محلی به طور تصادفی تخصیص یابد.

from sshtunnel import SSHTunnelForwarder
server = SSHTunnelForwarder(
    'alfa.8iq.dev',
    ssh_username="pahaz",
    ssh_password="secret",
    remote_bind_address=('127.0.0.1', 8080)
)
server.start()
print(server.local_bind_port)  # show assigned local port
# work with `SECRET SERVICE` through `server.local_bind_port`.
server.stop()

مثالی از فورواردینگ پورت به یک سرور خصوصی که مستقیماً در دسترس نیست، با فرض احراز هویت با کلید اختصاصی رمزگذاری‌شده (pkey)، در حالی که سرویس SSH سرور ریموت روی پورت ۴۴۳ شنود می‌کند و آن پورت در فایروال باز است (?Bشکل ۲?P):

import paramiko
import sshtunnel
with sshtunnel.open_tunnel(
    (REMOTE_SERVER_IP, 443),
    ssh_username="",
    ssh_pkey="/var/ssh/rsa_key",
    ssh_private_key_password="secret",
    remote_bind_address=(PRIVATE_SERVER_IP, 22),
    local_bind_address=('0.0.0.0', 10022)
) as tunnel:
    client = paramiko.SSHClient()
    client.load_system_host_keys()
    client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    client.connect('127.0.0.1', 10022)
    # do some operations with client session
    client.close()
print('FINISH!')

مثالی از فورواردینگ پورت برای پورت محلی MySQL در Vagrant:

from sshtunnel import open_tunnel
from time import sleep
with open_tunnel(
    ('localhost', 2222),
    ssh_username="vagrant",
    ssh_password="vagrant",
    remote_bind_address=('127.0.0.1', 3306)
) as server:
    print(server.local_bind_port)
    while True:
        # press Ctrl-C for stopping
        sleep(1)
print('FINISH!')

یا به سادگی با استفاده از خط فرمان (CLI):

(bash)$ python -m sshtunnel -U vagrant -P vagrant -L :3306 -R 127.0.0.1:3306 -p 2222 localhost

باز کردن یک نشست SSH با پرش از روی دو تونل. انتقال SSH و تونل‌ها به صورت دیمن درمی‌آیند، که در هنگام بسته شدن منتظر پایان یافتن اتصالات نمی‌مانند.

import sshtunnel
from paramiko import SSHClient
with sshtunnel.open_tunnel(
    ssh_address_or_host=('GW1_ip', 20022),
    remote_bind_address=('GW2_ip', 22),
) as tunnel1:
    print('Connection to tunnel1 (GW1_ip:GW1_port) OK...')
    with sshtunnel.open_tunnel(
        ssh_address_or_host=('localhost', tunnel1.local_bind_port),
        remote_bind_address=('target_ip', 22),
        ssh_username='GW2_user',
        ssh_password='GW2_pwd',
    ) as tunnel2:
        print('Connection to tunnel2 (GW2_ip:GW2_port) OK...')
        with SSHClient() as ssh:
            ssh.connect('localhost',
                port=tunnel2.local_bind_port,
                username='target_user',
                password='target_pwd',
            )
            ssh.exec_command(...)
$ sshtunnel --help
usage: sshtunnel [-h] [-U SSH_USERNAME] [-p SSH_PORT] [-P SSH_PASSWORD] -R
                 IP:PORT [IP:PORT ...] [-L [IP:PORT [IP:PORT ...]]]
                 [-k SSH_HOST_KEY] [-K KEY_FILE] [-S KEY_PASSWORD] [-t] [-v]
                 [-V] [-x IP:PORT] [-c SSH_CONFIG_FILE] [-z] [-n]
                 [-d [FOLDER [FOLDER ...]]]
                 ssh_address
Pure python ssh tunnel utils
Version 0.4.0
positional arguments:
  ssh_address           SSH server IP address (GW for SSH tunnels)
                        set with "-- ssh_address" if immediately after -R or -L
optional arguments:
  -h, --help            show this help message and exit
  -U SSH_USERNAME, --username SSH_USERNAME
                        SSH server account username
  -p SSH_PORT, --server_port SSH_PORT
                        SSH server TCP port (default: 22)
  -P SSH_PASSWORD, --password SSH_PASSWORD
                        SSH server account password
  -R IP:PORT [IP:PORT ...], --remote_bind_address IP:PORT [IP:PORT ...]
                        Remote bind address sequence: ip_1:port_1 ip_2:port_2 ... ip_n:port_n
                        Equivalent to ssh -Lxxxx:IP_ADDRESS:PORT
                        If port is omitted, defaults to 22.
                        Example: -R 10.10.10.10: 10.10.10.10:5900
  -L [IP:PORT [IP:PORT ...]], --local_bind_address [IP:PORT [IP:PORT ...]]
                        Local bind address sequence: ip_1:port_1 ip_2:port_2 ... ip_n:port_n
                        Elements may also be valid UNIX socket domains:
                        /tmp/foo.sock /tmp/bar.sock ... /tmp/baz.sock
                        Equivalent to ssh -LPORT:xxxxxxxxx:xxxx, being the local IP address optional.
                        By default it will listen in all interfaces (0.0.0.0) and choose a random port.
                        Example: -L :40000
  -k SSH_HOST_KEY, --ssh_host_key SSH_HOST_KEY
                        Gateway's host key
  -K KEY_FILE, --private_key_file KEY_FILE
                        RSA/ECDSA private key file
  -S KEY_PASSWORD, --private_key_password KEY_PASSWORD
                        RSA/ECDSA private key password
  -t, --threaded        Allow concurrent connections to each tunnel
  -v, --verbose         Increase output verbosity (default: ERROR)
  -V, --version         Show version number and quit
  -x IP:PORT, --proxy IP:PORT
                        IP and port of SSH proxy to destination
  -c SSH_CONFIG_FILE, --config SSH_CONFIG_FILE
                        SSH configuration file, defaults to ~/.ssh/config
  -z, --compress        Request server for compression over SSH transport
  -n, --noagent         Disable looking for keys from an SSH agent
  -d [FOLDER [FOLDER ...]], --host_pkey_directories [FOLDER [FOLDER ...]]
                        List of directories where SSH pkeys (in the format `id_*`) may be found

?Isshtunnel?P - ایجاد و برقراری تونل‌های SSH از طریق یک درگاه ریموت.

?Bsshtunnel?P با باز کردن یک اتصال فورواردینگ پورت SSH در پس‌زمینه با استفاده از ریسمان‌ها کار می‌کند.

اتصال(ها) هنگام فراخوانی صریح متد ?BSSHTunnelForwarder.stop()?P یا استفاده از آن به عنوان یک زمینه (context) بسته می‌شوند.

مهلت زمانی (به ثانیه) برای سوکت انتقال (?Bsocket.settimeout?P)
مهلت زمانی (به ثانیه) برای برقراری اتصال تونل (مهلت زمانی open_channel)
سطح پیش‌فرض لاگ‌گیری در صورت عدم ارائه شیء ثبت‌کننده (ERROR)
مسیر فایل پیکربندی اختیاری ssh
بررسی صحیح بودن ساختار آدرس
آرگومان‌ها:
یک زوج (?Bstr?P, ?Bint?P) که به ترتیب نشان‌دهنده آدرس IP و پورت هستند

?Bنکته:?P

در صورت پشتیبانی پلتفرم، هنگام کار با سوکت‌های دامنه یونیکس، ?Baddress?P محلی می‌تواند به صورت ?Bstr?P نیز باشد
خطاهای ایجادشده (Raises):
هنگامی که آدرس ساختار نادرستی داشته باشد پرتاب می‌شود
مثال:
>>> check_address(('127.0.0.1', 22))
بررسی صحیح بودن ساختار آدرس‌ها
آرگومان‌ها:
توالی‌ای از زوج‌های (?Bstr?P, ?Bint?P) که هر یک به ترتیب نشان‌دهنده آدرس IP و پورت هستند

?Bنکته:?P

در صورت پشتیبانی پلتفرم، یک یا چند عنصر از فهرست می‌توانند از نوع ?Bstr?P باشند که یک سوکت دامنه یونیکس معتبر را نشان می‌دهد
اینکه آیا فهرست آدرس‌ها مربوط به ریموت است یا خیر
خطاهای ایجادشده (Raises):
هنگامی که ?Baddress_list?P حاوی یک عنصر نامعتبر باشد پرتاب می‌شود
هنگامی که هر یک از آدرس‌های درون فهرست ساختار نادرستی داشته باشند پرتاب می‌شود

مثال:

>>> check_addresses([('127.0.0.1', 22), ('127.0.0.1', 2222)])
اتصال یا ایجاد یک ثبت‌کننده رویداد (logger) جدید و افزودن کنترل‌کننده کنسول در صورت عدم وجود

آرگومان‌ها:

نمونه‌ای از ?Blogging.Logger?P https://docs.python.org/3/library/logging.html#logging.Logger؛ در صورت خالی بودن این آرگومان، یک نمونه جدید ساخته می‌شود
سطح ?Blogging.Logger?P https://docs.python.org/3/library/logging.html#logging.Logger، به صورت رشته (مانند ?BERROR?P) یا مقدار عددی (10 == ?BDEBUG?P)

?Bنکته:?P

مقدار 1 == ?BTRACE?P حالت ردیابی (Tracing) را فعال می‌کند
فعال/غیرفعال‌سازی ثبت رویدادهای ماژول warnings در کنترل‌کننده‌های ?Blogger?P

پیش‌فرض: True

?Bنکته:?P

در پایتون ۲.۶ نادیده گرفته می‌شود
افزودن یا عدم افزودن یک کنترل‌کننده کنسول برای لاگر ?Bparamiko.transport?P در صورت نبود کنترل‌کننده

پیش‌فرض: True

مقدار بازگشتی:
?Blogging.Logger?P https://docs.python.org/3/library/logging.html#logging.Logger
استثنای پرتاب‌شده هنگام خطاهای ?BSSHTunnelForwarder?P
استثنا برای خطاهای فورواردر تونل
?Bکلاس تونل SSH?P
  • راه‌اندازی اولیه یک تونل SSH به میزبان ریموت بر اساس آرگومان‌های ورودی
به صورت اختیاری:
  • خواندن فایل پیکربندی SSH (معمولاً ?B~/.ssh/config?P)
  • بارگذاری کلیدها از یک عامل SSH فعال (مانند Pageant یا GNOME Keyring)

خطاهای ایجادشده (Raises):

?BBaseSSHTunnelForwarderError?P:
توسط متدهای کلاس SSHTunnelForwarder پرتاب می‌شود
?BHandlerSSHTunnelForwarderError?P:
توسط ریسمان‌های فورواردر تونل پرتاب می‌شود

?Bنکته:?P

ویژگی‌های ?Bmute_exceptions?P و ?Braise_exception_if_any_forwarder_have_a_problem?P (منسوخ‌شده) می‌توانند برای نادیده گرفتن اکثر استثناهای پرتاب‌شده از این کلاس استفاده شوند

آرگومان‌های کلیدواژه‌ای:

آدرس IP یا نام میزبان ?BREMOTE GATEWAY?P. می‌تواند یک تاپل دوعنصری (?Bstr?P, ?Bint?P) نشان‌دهنده به ترتیب IP و پورت باشد، یا یک ?Bstr?P که تنها آدرس IP را مشخص می‌کند

افزوده شده در نسخه 0.0.4.

فایل پیکربندی SSH که خوانده خواهد شد. اگر صریحاً روی ?BNone?P تنظیم شود، تجزیه این پیکربندی نادیده گرفته می‌شود

پیش‌فرض: ?BSSH_CONFIG_FILE?P

افزوده شده در نسخه 0.0.4.

نمایشی از یک خط در فایل «known hosts» به سبک OpenSSH.

اثر انگشت کلید ?BREMOTE GATEWAY?P با این کلید میزبان مقایسه می‌شود تا از جعل سرور SSH جلوگیری به عمل آید. هنگام استفاده از گذرواژه‌ها دارای اهمیت بالایی است تا تصادفاً اقدام به ورود به یک سیستم اشتباه (یا احتمالاً مهاجم) نشود

نام کاربری برای احراز هویت در ?BREMOTE SERVER?P

پیش‌فرض: نام کاربر محلی جاری

متن نشان‌دهنده گذرواژه مورد استفاده برای اتصال به ?BREMOTE SERVER?P یا برای باز کردن قفل کلید خصوصی.

?Bنکته:?P

از نوشتن مستقیم گذرواژه محرمانه در کد خودداری کنید، زیرا ممکن است آشکار شده و سرویس شما را در برابر حملات آسیب‌پذیر سازد
شماره پورت اختیاری سرویس SSH در ?BREMOTE GATEWAY?P، هنگامی که ?Issh_address_or_host`?P یک ?Bstr?P نشان‌دهنده بخش IP از آدرس ?BREMOTE GATEWAY?P باشد

پیش‌فرض: 22

نام فایل کلید ?Bخصوصی?P (?Bstr?P) برای دریافت کلید عمومی از آن، یا یک کلید ?Bعمومی?P (?Bparamiko.pkey.PKey?P https://docs.paramiko.org/en/latest/api/keys.html#paramiko.pkey.PKey)
گذرواژه برای یک ?Bssh_pkey?P رمزگذاری‌شده

?Bنکته:?P

از نوشتن مستقیم گذرواژه محرمانه در کد خودداری کنید، زیرا ممکن است آشکار شده و سرویس شما را در برابر حملات آسیب‌پذیر سازد
پروکسی که تمامی ترافیک SSH از آن عبور داده خواهد شد. می‌تواند به عنوان مثال یک نمونه از ?Bparamiko.proxy.ProxyCommand?P https://docs.paramiko.org/en/latest/api/proxy.html#paramiko.proxy.ProxyCommand باشد. برای اطلاعات بیشتر، به مستندات پارامتر sock در ?Bparamiko.transport.Transport?P https://docs.paramiko.org/en/latest/api/transport.html#paramiko.transport.Transport یا ?BProxyCommand?P در ?Bssh_config(5)?P مراجعه کنید.

همچنین امکان مشخص کردن آدرس پروکسی به صورت یک تاپل از نوع (?Bstr?P, ?Bint?P) نشان‌دهنده IP و پورت پروکسی وجود دارد

?Bنکته:?P

اگر ?Bssh_proxy_enabled?P برابر False باشد نادیده گرفته می‌شود

افزوده شده در نسخه 0.0.5.

فعال/غیرفعال‌سازی پروکسی SSH. اگر True باشد و ?Bssh_config_file?P کاربر حاوی یک دستورالعمل ?BProxyCommand?P باشد که با ?Bssh_address_or_host?P مشخص‌شده مطابقت کند، یک شیء ?Bparamiko.proxy.ProxyCommand?P https://docs.paramiko.org/en/latest/api/proxy.html#paramiko.proxy.ProxyCommand ایجاد می‌شود که تمام ترافیک SSH از طریق آن عبور داده خواهد شد

پیش‌فرض: ?BTrue?P

افزوده شده در نسخه 0.0.4.

تاپل محلی در قالب (?Bstr?P, ?Bint?P) نشان‌دهنده IP و پورت سمت محلی تونل. هر دو عنصر تاپل اختیاری هستند، بنابراین هر دو مقدار ?B('', 8000)?P و ?B('10.0.0.1', )?P مقادیر معتبری هستند

پیش‌فرض: ?B('0.0.0.0', RANDOM_PORT)?P

تغییر یافته در نسخه 0.0.8: افزوده شدن قابلیت استفاده از سوکت دامنه یونیکس به عنوان آدرس bind محلی

در صورتی که بیش از یک تونل به طور همزمان برقرار شود، می‌توان فهرستی از تاپل‌ها (با همان قالب ?Blocal_bind_address?P) مانند [(ip1, port_1), (ip_2, port2), ...] را مشخص کرد

پیش‌فرض: ?B[local_bind_address]?P

افزوده شده در نسخه 0.0.4.

تاپل ریموت در قالب (?Bstr?P, ?Bint?P) نشان‌دهنده IP و پورت سمت ریموت تونل.
در صورتی که بیش از یک تونل به طور همزمان برقرار شود، می‌توان فهرستی از تاپل‌ها (با همان قالب ?Bremote_bind_address?P) مانند [(ip1, port_1), (ip_2, port2), ...] را مشخص کرد

پیش‌فرض: ?B[remote_bind_address]?P

افزوده شده در نسخه 0.0.4.

فعال/غیرفعال‌سازی بارگذاری کلیدها از یک عامل SSH

پیش‌فرض: ?BTrue?P

افزوده شده در نسخه 0.0.8.

جستجو برای کلیدهای pkey در پوشه‌های موجود در این فهرست، برای مثال ['~/.ssh'].

پیش‌فرض: ?BNone?P (غیرفعال)

افزوده شده در نسخه 0.1.4.

فعال/غیرفعال‌سازی فشرده‌سازی انتقال داده. به صورت پیش‌فرض فشرده‌سازی غیرفعال است زیرا ممکن است بر نشست‌های تعاملی اثر منفی بگذارد

پیش‌فرض: ?BFalse?P

افزوده شده در نسخه 0.0.8.

نمونه لاگر برای sshtunnel و paramiko

پیش‌فرض: نمونه ?Blogging.Logger?P https://docs.python.org/3/library/logging.html#logging.Logger همراه با یک کنترل‌کننده منفرد ?Blogging.StreamHandler?P https://docs.python.org/3/library/logging.handlers.html#logging.StreamHandler و سطح ?BDEFAULT_LOGLEVEL?P

افزوده شده در نسخه 0.0.3.

امکان نادیده گرفتن استثناهای ?BBaseSSHTunnelForwarderError?P یا ?BHandlerSSHTunnelForwarderError?P در صورت فعال بودن

پیش‌فرض: ?BFalse?P

افزوده شده در نسخه 0.0.8.

بازه زمانی به ثانیه که مشخص می‌کند در صورت ارسال نشدن داده روی اتصال، یک بسته ?I'keepalive'?P ارسال شود (و توسط میزبان ریموت نادیده گرفته شود). این گزینه برای زنده نگه داشتن اتصالات روی NAT مفید است. برای غیرفعال کردن keepalive می‌توانید مقدار آن را روی 0.0 قرار دهید.

پیش‌فرض: 5.0 (هیچ بسته keepalive ارسال نمی‌شود)

افزوده شده در نسخه 0.0.7.

امکان برقراری اتصالات همزمان روی یک تونل واحد

پیش‌فرض: ?BTrue?P

افزوده شده در نسخه 0.0.3.

جایگزین‌شده توسط ?Bssh_address_or_host?P، تاپلی از نوع (str, int) نشان‌دهنده IP و پورت ?BREMOTE SERVER?P

منسوخ‌شده از نسخه 0.0.4.

جایگزین‌شده توسط ?Bssh_address_or_host?P، تاپلی از نوع (str, int) نشان‌دهنده IP و پورت ?BREMOTE SERVER?P

منسوخ‌شده از نسخه 0.0.4.

جایگزین‌شده توسط ?Bssh_pkey?P، که می‌تواند نشان‌دهنده نام فایل کلید ?Bخصوصی?P (?Bstr?P) یا یک کلید ?Bعمومی?P (?Bparamiko.pkey.PKey?P https://docs.paramiko.org/en/latest/api/keys.html#paramiko.pkey.PKey) باشد

منسوخ‌شده از نسخه 0.0.8.

امکان نادیده گرفتن استثناهای ?BBaseSSHTunnelForwarderError?P یا ?BHandlerSSHTunnelForwarderError?P در صورت تنظیم روی False

پیش‌فرض: ?BTrue?P

افزوده شده در نسخه 0.0.4.

منسوخ‌شده از نسخه 0.0.8: (به جای آن از ?Bmute_exceptions?P استفاده کنید)

ویژگی‌ها (Attributes):

توصیف اینکه آیا سمت دیگر تونل فعال گزارش شده است (و ما باید آن را ببندیم) یا خیر (صرف‌نظر کردن از بستن آن تونل)

?Bنکته:?P

این ویژگی نباید دستکاری شود

?Bنکته:?P

هنگامی که ?Bskip_tunnel_checkup?P غیرفعال باشد یا اتصال محلی یک سوکت یونیکس باشد، این مقدار همواره ?BTrue?P خواهد بود

?Bمثال?P:

{('127.0.0.1', 55550): True,   # this tunnel is up
 ('127.0.0.1', 55551): False}  # this one isn't

که در آن 55550 و 55551 پورت‌های bind محلی هستند

غیرفعال‌سازی بررسی تونل (پیش‌فرض برای سازگاری با نسخه‌های پیشین).

افزوده شده در نسخه 0.1.0.

پرچم‌گذاری ریسمان‌های تونل در حالت دیمن (daemon)
پرچم‌گذاری ریسمان انتقال SSH در حالت دیمن (daemon)
بررسی فعال بودن یک تونل (میزبان مقصد ریموت روی پورت TCP مقصد در دسترس است)
آرگومان‌ها:
تاپلی از نوع (?Bstr?P, ?Bint?P) نشان‌دهنده آدرس IP و پورت شنود
مقدار بازگشتی:
boolean

منسوخ‌شده از نسخه 0.1.0: جایگزین‌شده توسط ?Bcheck_tunnels()?P و ?Btunnel_is_up?P

بررسی برقرار بودن تمامی تونل‌ها و مقداردهی ?Btunnel_is_up?P
بارگذاری کلیدهای عمومی از هر عامل SSH در دسترس
آرگومان‌ها:
logger (Optional[logging.Logger])
مقدار بازگشتی:
list
بارگذاری کلیدهای عمومی از هر عامل SSH موجود یا پوشه محلی .ssh.
آرگومان‌ها:
logger (Optional[logging.Logger])
فهرستی از پوشه‌های محلی که کلیدهای pkey میزبان SSH با قالب "id_*" در آن‌ها جستجو می‌شوند. برای مثال ['~/.ssh']

افزوده شده در نسخه 0.1.0.

بارگذاری یا عدم بارگذاری کلیدها از عامل SSH

پیش‌فرض: False

مقدار بازگشتی:
list
دریافت کلید عمومی SSH از یک فایل کلید خصوصی با ارائه گذرواژه اختیاری
آرگومان‌ها:
فایل حاوی کلید خصوصی (RSA یا ECDSA)
آرگومان‌های کلیدواژه‌ای:
گذرواژه برای رمزگشایی کلید خصوصی

logger (Optional[logging.Logger])

مقدار بازگشتی:
paramiko.Pkey
راه‌اندازی و شروع تونل‌های SSH
خاموش کردن تونل. به طور پیش‌فرض همواره تا بسته شدن تمامی اتصالات منتظر می‌مانیم. می‌توانید از ?Iforce=True?P برای بستن اجباری اتصالات استفاده کنید
آرگومان‌های کلیدواژه‌ای:
بستن اجباری اتصالات فعلی

پیش‌فرض: False

افزوده شده در نسخه 0.2.2.

?Bنکته:?P

این مورد پیش از نسخه ?B0.1.0?P ?Bباید?P با دقت مدیریت می‌شد:
  • اگر یک فورواردینگ پورت باز باشد
  • مقصد در دسترس نباشد
  • تلاش برای اتصال به آن تونل صورت گیرد (بسته ?BSYN?P ارسال و تأیید می‌شود، سپس یک بسته ?BFIN?P ارسال شده که هرگز تأیید نمی‌شود... عجیب است)
  • تلاش برای خاموش کردن انجام دهیم: این عملیات تا زمانی که مهلت زمانی ?BFIN_WAIT_2?P و ?BCLOSE_WAIT?P سپری نشود موفقیت‌آمیز نخواهد بود.

?Bنکته:?P

این سناریوها را با ?Btunnel_is_up?P مدیریت کنید: در صورت False بودن، فراخوانی متد ?Bshutdown()?P سرور برای آن تونل نادیده گرفته می‌شود
متوقف کردن یک تونل فعال، نام مستعار برای ?Bstop()?P
راه‌اندازی مجدد اتصال به درگاه و تونل‌ها
بازگرداندن فهرستی شامل پورت‌های سمت محلی تونل‌های TCP
بازگرداندن فهرستی شامل آدرس‌های IP شنودکننده برای تونل‌ها
بازگرداندن فهرستی از جفت‌های (IP, port) برای سمت محلی تونل‌ها
بازگرداندن یک دیکشنری شامل tunnel_bindings فعال local<>remote
بازگرداندن True در صورت فعال بودن انتقال SSH زیرین
باز کردن یک تونل SSH، لایه پوششی (wrapper) برای ?BSSHTunnelForwarder?P
آرگومان‌ها:
آدرس IP و پورت سرور SSH در قالب (?Bssh_address?P, ?Bssh_port?P)
آرگومان‌های کلیدواژه‌ای:
سطح لاگ برای نمونه ?Blogging.Logger?P https://docs.python.org/3/library/logging.html#logging.Logger، به عنوان مثال ?BDEBUG?P
فعال/غیرفعال‌سازی بررسی سمت محلی و مقداردهی ?Btunnel_is_up?P

پیش‌فرض: True

افزوده شده در نسخه 0.1.0.

?Bنکته:?P

تنظیم مقدار ?Bdebug_level?P روی 1 == ?BTRACE?P حالت ردیابی را فعال می‌کند

?Bنکته:?P

برای آرگومان‌های کلیدواژه‌ای به ?BSSHTunnelForwarder?P مراجعه کنید

?Bمثال?P:

from sshtunnel import open_tunnel
with open_tunnel(SERVER,
                 ssh_username=SSH_USER,
                 ssh_port=22,
                 ssh_password=SSH_PASSWORD,
                 remote_bind_address=(REMOTE_HOST, REMOTE_PORT),
                 local_bind_address=('', LOCAL_PORT)) as server:
    def do_something(port):
        pass
    print("LOCAL PORTS:", server.local_bind_port)
    do_something(server.local_bind_port)
•
•
  • اصلاح تشخیص پوشه کلید میزبان
  • یکپارچه‌سازی پوشه پیش‌فرض پیکربندی ssh به ?I~/.ssh?P
•
•
افزایش مهلت زمانی اتصال باز به ۱۰ ثانیه
•
  • تغییر رفتار پیش‌فرض context با دستور with به استفاده از ?I.stop(force=True)?P در هنگام خروج (به طور کامل سازگار با نسخه‌های پیشین نیست)
  • حذف ترفند بلااستفاده ?Idaemon_forward_servers = True?P برای جلوگیری از قفل شدن (به طور کامل سازگار با نسخه‌های پیشین نیست)
  • تنظیم پیش‌فرض keepalive انتقال روی ۵ ثانیه (برای نسخه‌های کمتر از 0.3.0 غیرفعال بود)
  • تنظیم مهلت زمانی پیش‌فرض انتقال به 0.1
  • منسوخ‌سازی و حذف گزینه ?Iblock_on_close?P
  • رفع مشکل بن‌بست‌ها (deadlocks) / قفل شدن تونل‌ها (#173 https://github.com/pahaz/sshtunnel/issues/173)
•
•
افزودن متد ?I.stop(force=True)?P برای بستن اجباری اتصالات فعال (#201 https://github.com/pahaz/sshtunnel/issues/201)
•
•
•
پشتیبانی از IPv6 بدون فرمان پراکسی. استفاده از منطق توکار paramiko برای ایجاد سوکت. این منطق تلاش می‌کند از IPv6 استفاده کند و در صورت عدم موفقیت به IPv4 برمی‌گردد (#139 https://github.com/pahaz/sshtunnel/issues/139)
•
•
معرفی ویژگی ?Iblock_on_close?P
•
•
امکان بارگذاری کلیدهای pkey از ?I~/.ssh?P
•
  • به‌روزرسانی پارامتر ?Bpkey_file?P برای پذیرش مسیرهای نسبی به پوشه کاربر با استفاده از ?B~?P
  • چندین رفع اشکال
•
•
•
•
•
•
•
افزودن گزینه ?B-S?P در CLI برای پشتیبانی از گذرواژه کلید خصوصی ssh (Pahaz https://github.com/pahaz)
•
•
•
رفع اشکال شماره #24 https://github.com/pahaz/sshtunnel/issues/24 - پنهان کردن گذرواژه ssh در لاگ‌ها (Pahaz https://github.com/pahaz)
•
•
•
اصلاح حالت Thread.daemon برای نسخه پایتون < 3.3 شماره #16 https://github.com/pahaz/sshtunnel/issues/16 (Pahaz https://github.com/pahaz)
•
•
•
•

حق نشر (c) 2014-2019 Pahaz White

بدین‌وسیله به هر شخصی که نسخه‌ای از این نرم‌افزار و پرونده‌های مستندات مربوطه (معروف به «نرم‌افزار») را دریافت می‌کند، بدون پرداخت هزینه و بدون محدودیت، شامل حقوق استفاده، کپی، تغییر، ادغام، انتشار، توزیع، اعطای مجوز فرعی و/یا فروش نسخه‌های نرم‌افزار اجازه داده می‌شود، مشروط بر اینکه اطلاعیه حق نشر فوق و این مجوز در تمامی نسخه‌ها یا بخش‌های عمده نرم‌افزار گنجانده شود.

این نرم‌افزار «به همان صورتی که هست» ارائه می‌شود، بدون هیچ‌گونه ضمانت صریح یا ضمنی، از جمله ضمانت‌های تجاری بودن یا مناسب بودن برای یک هدف خاص. در هیچ شرایطی نویسندگان یا دارندگان حق نشر مسئولیتی در قبال هرگونه ادعا، خسارت یا سایر مسئولیت‌ها نخواهند داشت.

Pahaz White

2014-2020, Pahaz White and contributors

December 24, 2025 0.4.0