| SSHTUNNEL(1) | sshtunnel | SSHTUNNEL(1) |
نام (NAME)
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
پیشنیازها (REQUIREMENTS)
- •
- paramiko http://www.paramiko.org
بسته 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
آزمایش بسته (TESTING THE PACKAGE)
به منظور اجرای آزمونها ابتدا به 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 تونل را بر عهده میگیرد:
مثال ۱ (EXAMPLE 1)
کد متناظر با ?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()
مثال ۲ (EXAMPLE 2)
مثالی از فورواردینگ پورت به یک سرور خصوصی که مستقیماً در دسترس نیست، با فرض احراز هویت با کلید اختصاصی رمزگذاریشده (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!')
مثال ۳ (EXAMPLE 3)
مثالی از فورواردینگ پورت برای پورت محلی 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
مثال ۴ (EXAMPLE 4)
باز کردن یک نشست 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) بسته میشوند.
- sshtunnel.SSH_TIMEOUT = 0.1
- مهلت زمانی (به ثانیه) برای سوکت انتقال (?Bsocket.settimeout?P)
- sshtunnel.TUNNEL_TIMEOUT = 10.0
- مهلت زمانی (به ثانیه) برای برقراری اتصال تونل (مهلت زمانی open_channel)
- sshtunnel.DEFAULT_LOGLEVEL = 40
- سطح پیشفرض لاگگیری در صورت عدم ارائه شیء ثبتکننده (ERROR)
- sshtunnel.DEFAULT_SSH_DIRECTORY = '~/.ssh'
- مسیر فایل پیکربندی اختیاری ssh
- sshtunnel.check_address(address)
- بررسی صحیح بودن ساختار آدرس
- آرگومانها:
- address (tuple):
- یک زوج (?Bstr?P, ?Bint?P)
که به ترتیب
نشاندهنده
آدرس IP و
پورت هستند
?Bنکته:?P
- خطاهای ایجادشده (Raises):
- ValueError:
- هنگامی که آدرس ساختار نادرستی داشته باشد پرتاب میشود
- مثال:
-
>>> check_address(('127.0.0.1', 22))
- sshtunnel.check_addresses(address_list, is_remote=False)
- بررسی صحیح بودن ساختار آدرسها
- آرگومانها:
- address_list (list[tuple]):
- توالیای
از زوجهای
(?Bstr?P, ?Bint?P) که هر یک
به ترتیب
نشاندهنده
آدرس IP و
پورت هستند
?Bنکته:?P
- is_remote (boolean):
- اینکه آیا فهرست آدرسها مربوط به ریموت است یا خیر
- خطاهای ایجادشده (Raises):
- AssertionError:
- هنگامی که ?Baddress_list?P حاوی یک عنصر نامعتبر باشد پرتاب میشود
- ValueError:
- هنگامی که هر یک از آدرسهای درون فهرست ساختار نادرستی داشته باشند پرتاب میشود
مثال:
>>> check_addresses([('127.0.0.1', 22), ('127.0.0.1', 2222)])
- sshtunnel.create_logger(logger=None, loglevel=None, capture_warnings=True, add_paramiko_handler=True)
- اتصال یا
ایجاد یک
ثبتکننده
رویداد (logger)
جدید و
افزودن
کنترلکننده
کنسول در
صورت عدم
وجود
آرگومانها:
- logger (Optional[logging.Logger]):
- نمونهای از ?Blogging.Logger?P https://docs.python.org/3/library/logging.html#logging.Logger؛ در صورت خالی بودن این آرگومان، یک نمونه جدید ساخته میشود
- loglevel (Optional[str or int]):
- سطح ?Blogging.Logger?P
https://docs.python.org/3/library/logging.html#logging.Logger،
به صورت
رشته (مانند
?BERROR?P) یا مقدار
عددی (10 == ?BDEBUG?P)
?Bنکته:?P
- capture_warnings (boolean):
- فعال/غیرفعالسازی
ثبت
رویدادهای
ماژول warnings در
کنترلکنندههای
?Blogger?P
پیشفرض: True
?Bنکته:?P
- add_paramiko_handler (boolean):
- افزودن یا
عدم افزودن
یک
کنترلکننده
کنسول برای
لاگر ?Bparamiko.transport?P در
صورت نبود
کنترلکننده
پیشفرض: True
- مقدار بازگشتی:
- ?Blogging.Logger?P https://docs.python.org/3/library/logging.html#logging.Logger
- exception sshtunnel.BaseSSHTunnelForwarderError(*args, **kwargs)
- استثنای پرتابشده هنگام خطاهای ?BSSHTunnelForwarder?P
- exception sshtunnel.HandlerSSHTunnelForwarderError(*args, **kwargs)
- استثنا برای خطاهای فورواردر تونل
- راهاندازی اولیه یک تونل SSH به میزبان ریموت بر اساس آرگومانهای ورودی
- به صورت اختیاری:
- خواندن فایل پیکربندی SSH (معمولاً ?B~/.ssh/config?P)
- بارگذاری کلیدها از یک عامل SSH فعال (مانند Pageant یا GNOME Keyring)
خطاهای ایجادشده (Raises):
- ?BBaseSSHTunnelForwarderError?P:
- توسط متدهای کلاس SSHTunnelForwarder پرتاب میشود
- ?BHandlerSSHTunnelForwarderError?P:
- توسط
ریسمانهای
فورواردر
تونل پرتاب
میشود
?Bنکته:?P
آرگومانهای کلیدواژهای:
- ssh_address_or_host (tuple or str):
- آدرس IP یا
نام میزبان
?BREMOTE GATEWAY?P.
میتواند
یک تاپل
دوعنصری (?Bstr?P,
?Bint?P)
نشاندهنده
به ترتیب IP و
پورت باشد،
یا یک ?Bstr?P که
تنها آدرس IP
را مشخص
میکند
افزوده شده در نسخه 0.0.4.
- ssh_config_file (str):
- فایل
پیکربندی SSH
که خوانده
خواهد شد.
اگر صریحاً
روی ?BNone?P تنظیم
شود، تجزیه
این
پیکربندی
نادیده
گرفته
میشود
پیشفرض: ?BSSH_CONFIG_FILE?P
افزوده شده در نسخه 0.0.4.
- ssh_host_key (str):
- نمایشی از
یک خط در
فایل «known hosts»
به سبک OpenSSH.
اثر انگشت کلید ?BREMOTE GATEWAY?P با این کلید میزبان مقایسه میشود تا از جعل سرور SSH جلوگیری به عمل آید. هنگام استفاده از گذرواژهها دارای اهمیت بالایی است تا تصادفاً اقدام به ورود به یک سیستم اشتباه (یا احتمالاً مهاجم) نشود
- ssh_username (str):
- نام کاربری
برای احراز
هویت در ?BREMOTE SERVER?P
پیشفرض: نام کاربر محلی جاری
- ssh_password (str):
- متن
نشاندهنده
گذرواژه
مورد
استفاده
برای اتصال
به ?BREMOTE SERVER?P یا
برای باز
کردن قفل
کلید خصوصی.
?Bنکته:?P
- ssh_port (int):
- شماره پورت
اختیاری
سرویس SSH در ?BREMOTE
GATEWAY?P، هنگامی
که ?Issh_address_or_host`?P یک ?Bstr?P
نشاندهنده
بخش IP از
آدرس ?BREMOTE GATEWAY?P
باشد
پیشفرض: 22
- ssh_pkey (str or paramiko.PKey):
- نام فایل کلید ?Bخصوصی?P (?Bstr?P) برای دریافت کلید عمومی از آن، یا یک کلید ?Bعمومی?P (?Bparamiko.pkey.PKey?P https://docs.paramiko.org/en/latest/api/keys.html#paramiko.pkey.PKey)
- ssh_private_key_password (str):
- گذرواژه
برای یک ?Bssh_pkey?P
رمزگذاریشده
?Bنکته:?P
- ssh_proxy (socket-like object or tuple):
- پروکسی که
تمامی
ترافیک 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
افزوده شده در نسخه 0.0.5.
- ssh_proxy_enabled (boolean):
- فعال/غیرفعالسازی
پروکسی 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.
- local_bind_address (tuple):
- تاپل محلی
در قالب (?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 محلی
- local_bind_addresses (list[tuple]):
- در صورتی که
بیش از یک
تونل به طور
همزمان
برقرار
شود،
میتوان
فهرستی از
تاپلها (با
همان قالب
?Blocal_bind_address?P) مانند [(ip1,
port_1), (ip_2, port2), ...] را
مشخص کرد
پیشفرض: ?B[local_bind_address]?P
افزوده شده در نسخه 0.0.4.
- remote_bind_address (tuple):
- تاپل ریموت در قالب (?Bstr?P, ?Bint?P) نشاندهنده IP و پورت سمت ریموت تونل.
- remote_bind_addresses (list[tuple]):
- در صورتی که
بیش از یک
تونل به طور
همزمان
برقرار
شود،
میتوان
فهرستی از
تاپلها (با
همان قالب
?Bremote_bind_address?P) مانند [(ip1,
port_1), (ip_2, port2), ...] را
مشخص کرد
پیشفرض: ?B[remote_bind_address]?P
افزوده شده در نسخه 0.0.4.
- allow_agent (boolean):
- فعال/غیرفعالسازی
بارگذاری
کلیدها از
یک عامل SSH
پیشفرض: ?BTrue?P
افزوده شده در نسخه 0.0.8.
- host_pkey_directories (list):
- جستجو برای
کلیدهای pkey
در
پوشههای
موجود در
این فهرست،
برای مثال
['~/.ssh'].
پیشفرض: ?BNone?P (غیرفعال)
افزوده شده در نسخه 0.1.4.
- compression (boolean):
- فعال/غیرفعالسازی
فشردهسازی
انتقال
داده. به
صورت
پیشفرض
فشردهسازی
غیرفعال
است زیرا
ممکن است بر
نشستهای
تعاملی اثر
منفی
بگذارد
پیشفرض: ?BFalse?P
افزوده شده در نسخه 0.0.8.
- logger (logging.Logger):
- نمونه لاگر
برای 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.
- mute_exceptions (boolean):
- امکان
نادیده
گرفتن
استثناهای
?BBaseSSHTunnelForwarderError?P یا
?BHandlerSSHTunnelForwarderError?P در
صورت فعال
بودن
پیشفرض: ?BFalse?P
افزوده شده در نسخه 0.0.8.
- set_keepalive (float):
- بازه زمانی
به ثانیه که
مشخص
میکند در
صورت ارسال
نشدن داده
روی اتصال،
یک بسته ?I'keepalive'?P
ارسال شود
(و توسط
میزبان
ریموت
نادیده
گرفته شود).
این گزینه
برای زنده
نگه داشتن
اتصالات
روی NAT مفید
است. برای
غیرفعال
کردن keepalive
میتوانید
مقدار آن را
روی 0.0 قرار
دهید.
پیشفرض: 5.0 (هیچ بسته keepalive ارسال نمیشود)
افزوده شده در نسخه 0.0.7.
- threaded (boolean):
- امکان
برقراری
اتصالات
همزمان روی
یک تونل
واحد
پیشفرض: ?BTrue?P
افزوده شده در نسخه 0.0.3.
- ssh_address (str):
- جایگزینشده
توسط ?Bssh_address_or_host?P،
تاپلی از
نوع (str, int)
نشاندهنده
IP و پورت ?BREMOTE SERVER?P
منسوخشده از نسخه 0.0.4.
- ssh_host (str):
- جایگزینشده
توسط ?Bssh_address_or_host?P،
تاپلی از
نوع (str, int)
نشاندهنده
IP و پورت ?BREMOTE SERVER?P
منسوخشده از نسخه 0.0.4.
- ssh_private_key (str or paramiko.PKey):
- جایگزینشده
توسط ?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.
- raise_exception_if_any_forwarder_have_a_problem (boolean):
- امکان
نادیده
گرفتن
استثناهای
?BBaseSSHTunnelForwarderError?P یا
?BHandlerSSHTunnelForwarderError?P در
صورت تنظیم
روی False
پیشفرض: ?BTrue?P
افزوده شده در نسخه 0.0.4.
منسوخشده از نسخه 0.0.8: (به جای آن از ?Bmute_exceptions?P استفاده کنید)
ویژگیها (Attributes):
- tunnel_is_up (dict):
- توصیف
اینکه آیا
سمت دیگر
تونل فعال
گزارش شده
است (و ما
باید آن را
ببندیم) یا
خیر
(صرفنظر
کردن از
بستن آن
تونل)
?Bنکته:?P
?Bنکته:?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 محلی هستند
- skip_tunnel_checkup (boolean):
- غیرفعالسازی
بررسی تونل
(پیشفرض
برای
سازگاری با
نسخههای
پیشین).
افزوده شده در نسخه 0.1.0.
- daemon_forward_servers = True
- پرچمگذاری ریسمانهای تونل در حالت دیمن (daemon)
- daemon_transport = True
- پرچمگذاری ریسمان انتقال SSH در حالت دیمن (daemon)
- local_is_up(target)
- بررسی فعال بودن یک تونل (میزبان مقصد ریموت روی پورت TCP مقصد در دسترس است)
- آرگومانها:
- target (tuple):
- تاپلی از نوع (?Bstr?P, ?Bint?P) نشاندهنده آدرس IP و پورت شنود
- مقدار بازگشتی:
- boolean
منسوخشده از نسخه 0.1.0: جایگزینشده توسط ?Bcheck_tunnels()?P و ?Btunnel_is_up?P
- check_tunnels()
- بررسی برقرار بودن تمامی تونلها و مقداردهی ?Btunnel_is_up?P
- static get_agent_keys(logger=None)
- بارگذاری کلیدهای عمومی از هر عامل SSH در دسترس
- آرگومانها:
- logger (Optional[logging.Logger])
- مقدار بازگشتی:
- list
- static get_keys(logger=None, host_pkey_directories=None, allow_agent=False)
- بارگذاری کلیدهای عمومی از هر عامل SSH موجود یا پوشه محلی .ssh.
- آرگومانها:
- logger (Optional[logging.Logger])
- host_pkey_directories (Optional[list[str]]):
- فهرستی از
پوشههای
محلی که
کلیدهای pkey
میزبان SSH با
قالب "id_*" در
آنها
جستجو
میشوند.
برای مثال
['~/.ssh']
افزوده شده در نسخه 0.1.0.
- allow_agent (Optional[boolean]):
- بارگذاری
یا عدم
بارگذاری
کلیدها از
عامل SSH
پیشفرض: False
- مقدار بازگشتی:
- list
- static read_private_key_file(pkey_file, pkey_password=None, key_type=None, logger=None)
- دریافت کلید عمومی SSH از یک فایل کلید خصوصی با ارائه گذرواژه اختیاری
- آرگومانها:
- pkey_file (str):
- فایل حاوی کلید خصوصی (RSA یا ECDSA)
- آرگومانهای کلیدواژهای:
- pkey_password (Optional[str]):
- گذرواژه برای رمزگشایی کلید خصوصی
logger (Optional[logging.Logger])
- مقدار بازگشتی:
- paramiko.Pkey
- start()
- راهاندازی و شروع تونلهای SSH
- stop(force=False)
- خاموش کردن تونل. به طور پیشفرض همواره تا بسته شدن تمامی اتصالات منتظر میمانیم. میتوانید از ?Iforce=True?P برای بستن اجباری اتصالات استفاده کنید
- آرگومانهای کلیدواژهای:
- force (bool):
- بستن
اجباری
اتصالات
فعلی
پیشفرض: False
افزوده شده در نسخه 0.2.2.
?Bنکته:?P
- اگر یک فورواردینگ پورت باز باشد
- مقصد در دسترس نباشد
- تلاش برای اتصال به آن تونل صورت گیرد (بسته ?BSYN?P ارسال و تأیید میشود، سپس یک بسته ?BFIN?P ارسال شده که هرگز تأیید نمیشود... عجیب است)
- تلاش برای خاموش کردن انجام دهیم: این عملیات تا زمانی که مهلت زمانی ?BFIN_WAIT_2?P و ?BCLOSE_WAIT?P سپری نشود موفقیتآمیز نخواهد بود.
?Bنکته:?P
- close()
- متوقف کردن یک تونل فعال، نام مستعار برای ?Bstop()?P
- restart()
- راهاندازی مجدد اتصال به درگاه و تونلها
- property local_bind_ports
- بازگرداندن فهرستی شامل پورتهای سمت محلی تونلهای TCP
- property local_bind_hosts
- بازگرداندن فهرستی شامل آدرسهای IP شنودکننده برای تونلها
- property local_bind_addresses
- بازگرداندن فهرستی از جفتهای (IP, port) برای سمت محلی تونلها
- property tunnel_bindings
- بازگرداندن یک دیکشنری شامل tunnel_bindings فعال local<>remote
- property is_active
- بازگرداندن True در صورت فعال بودن انتقال SSH زیرین
- sshtunnel.open_tunnel(*args, **kwargs)
- باز کردن یک تونل SSH، لایه پوششی (wrapper) برای ?BSSHTunnelForwarder?P
- آرگومانها:
- destination (Optional[tuple]):
- آدرس IP و پورت سرور SSH در قالب (?Bssh_address?P, ?Bssh_port?P)
- آرگومانهای کلیدواژهای:
- debug_level (Optional[int or str]):
- سطح لاگ برای نمونه ?Blogging.Logger?P https://docs.python.org/3/library/logging.html#logging.Logger، به عنوان مثال ?BDEBUG?P
- skip_tunnel_checkup (boolean):
- فعال/غیرفعالسازی
بررسی سمت
محلی و
مقداردهی
?Btunnel_is_up?P
پیشفرض: True
افزوده شده در نسخه 0.1.0.
?Bنکته:?P
?Bنکته:?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)
- Cameron Maske https://github.com/cameronmaske
- Gustavo Machado https://github.com/gdmachado
- Colin Jermain https://github.com/cjermain
- JM Fernández https://github.com/fernandezcuesta - (تشکر فراوان!)
- Lewis Thompson https://github.com/lewisthompson
- Erik Rogers https://github.com/ewrogers
- Mart Sõmermaa https://github.com/mrts
- Chronial https://github.com/Chronial
- Dan Harbin https://github.com/RasterBurn
- Ignacio Peluffo https://github.com/ipeluffo
- Niels Zeilemaker https://github.com/NielsZeilemaker
- Georgy Rylov https://github.com/g0djan
- Eddie Chiang https://github.com/eddie-chiang
- kkrasovskii https://github.com/kkrasovskii
- •
- تغییر پرچم حالت daemon برای تمام ریسمانهای تونل (به طور کامل سازگار با نسخههای پیشین نیست) جهت جلوگیری از قفل شدن غیرمنتظره (#219 https://github.com/pahaz/sshtunnel/issues/219)
- افزودن آزمونهای عملکردی سرتاسری مبتنی بر داکر برای Mongo/Postgres/MySQL (#219 https://github.com/pahaz/sshtunnel/issues/219)
- افزودن آزمونهای قفل شدن سرتاسری مبتنی بر داکر (#219 https://github.com/pahaz/sshtunnel/issues/219)
- •
- اصلاح تشخیص پوشه کلید میزبان
- یکپارچهسازی پوشه پیشفرض پیکربندی 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)
- •
- •
- رفع اشکال ریسمان یتیم برای تونلی که قطع شده است (DOWN) (#170 https://github.com/pahaz/sshtunnel/issues/170)
- •
- •
- پشتیبانی از 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
- چندین رفع اشکال
- •
- •
- رفع اشکال #77
- •
- •
- رفع اشکال #72
- •
- افزودن ویژگی ?Itunnel_bindings?P
- چندین رفع اشکال (#49, #56, #57, #59, #60, #62, #64, #66, ...) (Pahaz https://github.com/pahaz, JM Fernández https://github.com/fernandezcuesta)
- افزودن سطح لاگ TRACE (JM Fernández https://github.com/fernandezcuesta)
- بازآرایی کد و تستها (JM Fernández https://github.com/fernandezcuesta)
- پایان پشتیبانی از python3.2
- •
- ادغام #31 https://github.com/pahaz/sshtunnel/issues/31: پشتیبانی از فورواردینگ سوکت دامنه یونیکس (محلی) (Dan Harbin https://github.com/RasterBurn)
- سادهسازی API (JM Fernández https://github.com/fernandezcuesta)
- افزودن مستندات مبتنی بر اسفینکس (JM Fernández https://github.com/fernandezcuesta)
- افزودن ?Ballow_agent?P (رفع #36 https://github.com/pahaz/sshtunnel/issues/36, #46 https://github.com/pahaz/sshtunnel/issues/46) (JM Fernández https://github.com/fernandezcuesta)
- افزودن ?Bcompression?P (JM Fernández https://github.com/fernandezcuesta)
- افزودن متد ?B__str__?P (JM Fernández https://github.com/fernandezcuesta)
- افزودن توابع آزمون (JM Fernández https://github.com/fernandezcuesta)
- اصلاح نام کاربری پیشفرض هنگام عدم ارائه و صرفنظر شدن از فایل ssh_config (JM Fernández https://github.com/fernandezcuesta)
- اصلاح دریافت استثنای نامعتبر بودن یا حل نشدن IP درگاه (JM Fernández https://github.com/fernandezcuesta)
- اصلاحات جزئی (JM Fernández https://github.com/fernandezcuesta)
- افزودن پشتیبانی از AppVeyor (JM Fernández https://github.com/fernandezcuesta)
- •
- اکنون تونلها میتوانند با اطمینان متوقف و مجدداً راهاندازی شوند (#41 https://github.com/pahaz/sshtunnel/issues/41) (JM Fernández https://github.com/fernandezcuesta)
- افزودن مهلت زمانی به درگاه SSH و پیامهای keep-alive (#29 https://github.com/pahaz/sshtunnel/issues/29) (JM Fernández https://github.com/fernandezcuesta)
- امکان ارسال مستقیم یک pkey (#43 https://github.com/pahaz/sshtunnel/issues/43) (Chronial https://github.com/Chronial)
- افزودن گزینه ?B-V?P در CLI برای نمایش نسخه فعلی (JM Fernández https://github.com/fernandezcuesta)
- افزودن آزمون پوشش کد (JM Fernández https://github.com/fernandezcuesta)
- بازآرایی ساختار کد (JM Fernández https://github.com/fernandezcuesta)
- •
- •
- افزودن گزینه ?B-S?P در CLI برای پشتیبانی از گذرواژه کلید خصوصی ssh (Pahaz https://github.com/pahaz)
- •
- افزودن آرگومان ?Bssh_proxy?P و همچنین پشتیبانی از ?BProxyCommand?P در ?Bssh_config(5)?P (Lewis Thompson https://github.com/lewisthompson)
- افزودن برخی اصلاحات برای سازگاری با پایتون ۲.۶ (Mart Sõmermaa https://github.com/mrts)
- به ارث بردن هندلرهای لاگرهای ارسالشده به ?BSSHTunnelForwarder?P توسط ?Bparamiko.transport?P (JM Fernández https://github.com/fernandezcuesta)
- رفع اشکال #34 https://github.com/pahaz/sshtunnel/issues/34، شماره #33 https://github.com/pahaz/sshtunnel/issues/33 (Pahaz https://github.com/pahaz)
- افزودن آزمونها (Pahaz https://github.com/pahaz)
- افزودن یکپارچهسازی CI (Pahaz https://github.com/pahaz)
- بستهبندی استاندارد (Pahaz https://github.com/pahaz)
- غیرفعالسازی بررسی اتصال سوکت مقصد توسط ?BSSHTunnelForwarder.local_is_up?P (Pahaz https://github.com/pahaz)
- استفاده از daemon mode = False در تمامی ریسمانها به صورت پیشفرض؛ جزئیات: https://github.com/pahaz/sshtunnel/issues/33
- •
- •
- رفع اشکال شماره #24 https://github.com/pahaz/sshtunnel/issues/24 - پنهان کردن گذرواژه ssh در لاگها (Pahaz https://github.com/pahaz)
- •
- •
- رفع اشکال پورت پیشفرض شماره #19 https://github.com/pahaz/sshtunnel/issues/19 (Pahaz https://github.com/pahaz)
- •
- •
- اصلاح حالت Thread.daemon برای نسخه پایتون < 3.3 شماره #16 https://github.com/pahaz/sshtunnel/issues/16 (Pahaz https://github.com/pahaz)
- •
- •
- رفع مشکلات CLI شماره #13 https://github.com/pahaz/sshtunnel/issues/13 (Pahaz https://github.com/pahaz)
- •
- حالت daemon به صورت پیشفرض برای تمام ریسمانها (JM Fernández https://github.com/fernandezcuesta, Pahaz https://github.com/pahaz)
- انتقال ?Bmake_ssh_forward_server?P به ?BSSHTunnelForwarder.make_ssh_forward_server?P (Pahaz https://github.com/pahaz)
- انتقال ?Bmake_ssh_forward_handler?P به ?BSSHTunnelForwarder.make_ssh_forward_handler_class?P (Pahaz https://github.com/pahaz)
- تغییر نام ?Bopen?P به ?Bopen_tunnel?P (JM Fernández https://github.com/fernandezcuesta) - تشکر فراوان!
- افزودن رابط خط فرمان CLI (JM Fernández https://github.com/fernandezcuesta)
- پشتیبانی از باز کردن همزمان چندین تونل (JM Fernández https://github.com/fernandezcuesta)
- بهبود پایداری و خوانایی کد (JM Fernández https://github.com/fernandezcuesta, Pahaz https://github.com/pahaz)
- بهبود سیستم ثبت رویدادها و لاگها (JM Fernández https://github.com/fernandezcuesta, Pahaz https://github.com/pahaz)
- افزودن آرگومان ?Braise_exception_if_any_forwarder_have_a_problem?P برای باز کردن چندین تونل همزمان (Pahaz https://github.com/pahaz)
- افزودن پشتیبانی از آرگومان ?Bssh_config_file?P (JM Fernández https://github.com/fernandezcuesta)
- افزودن پشتیبانی از Python 3 (JM Fernández https://github.com/fernandezcuesta, Pahaz https://github.com/pahaz)
- •
- افزودن گزینه ?Bthreaded?P (Cameron Maske https://github.com/cameronmaske)
- اصلاح پیام خطای استثنا، چاپ صحیح آدرس مقصد (Gustavo Machado https://github.com/gdmachado)
- اصلاح خطای ?Bpip install?P (Colin Jermain https://github.com/cjermain, Pahaz https://github.com/pahaz)
- •
- کلاس ?BSSHTunnelForwarder?P (Pahaz https://github.com/pahaz)
- تابع ?Bopen?P (Pahaz https://github.com/pahaz)
حق نشر (c) 2014-2019 Pahaz White
بدینوسیله به هر شخصی که نسخهای از این نرمافزار و پروندههای مستندات مربوطه (معروف به «نرمافزار») را دریافت میکند، بدون پرداخت هزینه و بدون محدودیت، شامل حقوق استفاده، کپی، تغییر، ادغام، انتشار، توزیع، اعطای مجوز فرعی و/یا فروش نسخههای نرمافزار اجازه داده میشود، مشروط بر اینکه اطلاعیه حق نشر فوق و این مجوز در تمامی نسخهها یا بخشهای عمده نرمافزار گنجانده شود.
این نرمافزار «به همان صورتی که هست» ارائه میشود، بدون هیچگونه ضمانت صریح یا ضمنی، از جمله ضمانتهای تجاری بودن یا مناسب بودن برای یک هدف خاص. در هیچ شرایطی نویسندگان یا دارندگان حق نشر مسئولیتی در قبال هرگونه ادعا، خسارت یا سایر مسئولیتها نخواهند داشت.
نویسنده (AUTHOR)
Pahaz White
حق نشر (COPYRIGHT)
2014-2020, Pahaz White and contributors
| December 24, 2025 | 0.4.0 |