Fabric: Fab에 터널링 μ»¨ν…μŠ€νŠΈ μΆ”κ°€

에 λ§Œλ“  2011λ…„ 08μ›” 19일  Β·  13μ½”λ©˜νŠΈ  Β·  좜처: fabric/fabric

μ„€λͺ…

맀우 μ‰½κ²Œ λ§Œλ“€ 수 있기 λ•Œλ¬Έμ— 이것은 λ‚˜μ—κ²Œ 맀우 도움이 될 κ²ƒμž…λ‹ˆλ‹€.
예λ₯Ό λ“€μ–΄ λ‚΄ λͺ…령쀄을 μ‚¬μš©ν•˜μ—¬ 원격 MySQL μ„œλ²„μ— μ—°κ²°ν•˜λ €λ©΄
MySQL ν΄λΌμ΄μ–ΈνŠΈ.

λ‹€μŒκ³Ό 같이 "with" μ»¨ν…μŠ€νŠΈ 문을 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

with tunnel(local=3307, remote=3306):
    local('mysql --port=3007 --host=localhost' mydb < db/dbdump.sql')

μ΄λ ‡κ²Œ ν•˜λ©΄ mysql 덀프 νŒŒμΌμ„ μ„œλ²„μ— μ—…λ‘œλ“œν•  ν•„μš”κ°€ μ—†μŠ΅λ‹ˆλ‹€.
κ°€μ Έμ˜€κΈ°λ₯Ό μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

또 λ‹€λ₯Έ μ‘μš© ν”„λ‘œκ·Έλž¨μ€ Cherokee μ›Ή μ„œλ²„λ₯Ό κ΄€λ¦¬ν•˜κΈ° μœ„ν•œ 것일 수 μžˆμŠ΅λ‹ˆλ‹€.

Cherokee μ›Ή κ΄€λ¦¬μžλŠ” 기본적으둜 λ‹€μŒμ„ μˆ˜ν–‰ν•˜λŠ” μ„œλ²„μ—μ„œλ§Œ μ•‘μ„ΈμŠ€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
μ‹€ν–‰ μ€‘μž…λ‹ˆλ‹€. λ”°λΌμ„œ 터널링해야 ν•˜λŠ” κ΄€λ¦¬μžμ— μ•‘μ„ΈμŠ€ν•˜λ €λ©΄
μ„œλ²„μ— μ—°κ²°ν•˜κ³  둜컬 포트λ₯Ό μ‚¬μš©ν•˜μ—¬ κ΄€λ¦¬μž μΈν„°νŽ˜μ΄μŠ€μ— μ•‘μ„ΈμŠ€ν•©λ‹ˆλ‹€.
이것은 λ˜ν•œ 이 κΈ°λŠ₯으둜 λ‹¨μˆœν™”λ  수 μžˆμŠ΅λ‹ˆλ‹€.

with tunnel(local=9090, remote=9090):
   sudo('cherokee-admin')
   prompt('Stop cherokee admin?')

이 λ§ˆμ§€λ§‰ 쀄은 μž…λ ₯을 μ œκ³΅ν•˜μ—¬ 터널이 λ‹«νž λ•ŒκΉŒμ§€ 터널을 μ—΄λ¦° μƒνƒœλ‘œ μœ μ§€ν•©λ‹ˆλ‹€.


μ›λž˜ Taras Mankovski ( tarasm)κ°€ 2009λ…„ 11μ›” 2일 μ˜€μ „ 9μ‹œ 30λΆ„(동뢀 ν‘œμ€€μ‹œ )에 μ œμΆœν–ˆμŠ΅λ‹ˆλ‹€.

μ²˜μ§€

  • κ΄€λ ¨ #38: 터널링 κ΅¬ν˜„
Feature Network

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

939λŠ” μ—¬μ „νžˆ 릴리슀 버킷에 있으며 _일뢀_ ν•­λͺ©μ„ μž˜λΌμ•Ό ν–ˆκΈ° λ•Œλ¬Έμ— 곧 μΆœμ‹œλ  1.11μ—μ„œ νŽ€νŠΈν–ˆμ§€λ§Œ λ‹€μŒ κΈ°λŠ₯ μ£ΌκΈ°μ—μ„œλŠ” μš°μ„  μˆœμœ„λ₯Ό κ°–κ²Œ λ©λ‹ˆλ‹€. (그리고 #1218이 #939λ₯Ό λŒ€μ²΄ν•˜λŠ” κ²ƒμ²˜λŸΌ λ³΄μ΄λ―€λ‘œ λ‚˜λŠ” μ•„λ§ˆλ„ 그것을 λ³‘ν•©ν•˜κ³  λ³€κ²½ λ‘œκ·Έμ— #939λ₯Ό κΈ°λ‘ν•˜κ²Œ 될 κ²ƒμž…λ‹ˆλ‹€.)

λͺ¨λ“  13 λŒ“κΈ€

Jeff Forcier ( bitprophet ) κ²Œμ‹œ:


(μ½”λ“œ 블둝이 λ“€μ—¬μ“°κΈ°λ˜λ„λ‘ μ„€λͺ… μˆ˜μ • :))


2009-11-02 09:35am EST

터널이 λ°˜λŒ€μ˜ κ²½μš°λ„ μ§€μ›ν•œλ‹€λ©΄ ꡉμž₯ν•  κ²ƒμž…λ‹ˆλ‹€. μ›κ²©μ—μ„œ μˆ˜μ‹  λŒ€κΈ°ν•˜κ³  이λ₯Ό localhost/λ‹€λ₯Έ λ‘œμ»¬μ—μ„œ μ‚¬μš© κ°€λŠ₯ν•œ host:port둜 μ „λ‹¬ν•˜λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€.

@munhitsu ν•˜μ§€λ§Œ 이것이 Fabric의 ꡬ체적인 μ‚¬μš© μ‚¬λ‘€μΈμ§€λŠ” 잘 λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€. μžμ„Ένžˆ μ•Œλ €μ£Όμ‹€ 수 μžˆλ‚˜μš”?

μ•„μ›ƒλ°”μš΄λ“œ http/proxy μ•‘μ„ΈμŠ€κ°€ μ—†λŠ” DMZ 섀정을 상상해 λ³΄μ‹­μ‹œμ˜€.
전체 λ°°ν¬λŠ” νŒ¨λΈŒλ¦­μ„ 톡해 μ΄λ£¨μ–΄μ§‘λ‹ˆλ‹€.

μ΄λŸ¬ν•œ 경우 νŒ¨λΈŒλ¦­μ„ μ‚¬μš©ν•˜μ—¬ sshλ₯Ό 톡해 둜컬 ν”„λ‘μ‹œλ₯Ό ν„°λ„λ§ν•˜μ—¬ DMZμ—μ„œ 방금 ν”„λ‘œλΉ„μ €λ‹λ˜λŠ” ν˜ΈμŠ€νŠΈμ— μΌμ‹œμ μœΌλ‘œ μ•‘μ„ΈμŠ€ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ§€κΈˆμ€ 패브릭이 이 ν„°λ„μ˜ "μ»¨ν…μŠ€νŠΈ" λ‚΄μ—μ„œ μž‘λ™ν•˜λ„λ‘ 두 번째 μ½˜μ†”μ—μ„œ λ³„λ„μ˜ ssh 터널을 μ—΄κ³  μžˆμŠ΅λ‹ˆλ‹€.

μ‚¬μš© 예:

with rev_tunnel(local=8080, remote=8080):
    sudo("http_proxy='http://localhost:8080' apt-get install -y puppet")

μ’‹μ•„, κ·Έλž˜μ„œ λ‚΄κ°€ μΆ”μΈ‘ν•˜λŠ” 것은 μƒλ‹Ήνžˆ ν‘œμ€€μ μΈ μ—­ 터널 섀정이고, λ‹Ήμ‹ μ˜ λ°”λžŒμ€ λ‹€μ‹œ: Fabric은 터널을 μ²˜λ¦¬ν•˜λŠ” 것과 예λ₯Ό λ“€μ–΄ local(ssh -R ...) λ₯Ό μ‹€ν–‰ν•΄μ•Ό ν•˜λŠ” 것을 μ²˜λ¦¬ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

λ‚˜λŠ” 이것이 μ§„μ •μœΌλ‘œ 코어에 λ“€μ–΄κ°ˆ κ°€μΉ˜κ°€ μžˆλŠ”μ§€μ— λŒ€ν•΄ μ™”λ‹€κ°”λ‹€ν–ˆμ§€λ§Œ, Fabricμ—μ„œ μ μ ˆν•œ 지원을 ν•˜λŠ” 것은 정말 μ˜λ―Έκ°€ μžˆμŠ΅λ‹ˆλ‹€. λ‹€λ₯Έ μ†”λ£¨μ…˜μ€ ν•΄ν‚€(예: ssh λ₯Ό μ‹€ν–‰ν•˜λŠ” 일뢀 μŠ€λ ˆλ“œ λ˜λŠ” ν•˜μœ„ ν”„λ‘œμ„ΈμŠ€ -- 이 μž‘μ—…μ„ 잘 μˆ˜ν–‰ν•˜λŠ” 방법, Fabκ°€ μ’…λ£Œλ  λ•Œ μ’…λ£Œν•˜λŠ”μ§€ 확인 λ“±)ν•˜κ³  μ‚¬μš© μ‚¬λ‘€μ˜ μœ νš¨μ„±μ„ ν™•μΈν•©λ‹ˆλ‹€(둜컬 곡유 μ‹€ν–‰ν•˜λŠ” λ™μ•ˆ 원격 끝이 μžˆλŠ” λ¦¬μ†ŒμŠ€.)

μ£Όμš” μž₯애물은 SSH λΌμ΄λΈŒλŸ¬λ¦¬κ°€ 아직 이것을 μ§€μ›ν•˜λŠ”μ§€ ν™•μ‹ ν•  수 μ—†λ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. μš°λ¦¬λŠ” 그것을 μ•Œμ•„λ‚΄μ•Ό ν•˜κ³  그렇지 μ•Šλ‹€λ©΄ λˆ„κ΅°κ°€ 그것을 κ΅¬ν˜„ν•΄μ•Ό ν•  κ²ƒμž…λ‹ˆλ‹€. (κ·ΈλŸ¬λ‚˜ μ΄λŠ” μ•žμ„œ μ–ΈκΈ‰ν•œ ssh -R ν•΄κ²° 방법을 κ°•ν™”ν•˜λŠ” 것과 λΉ„κ΅ν•˜μ—¬ ν•΄λ‹Ή λΌμ΄λΈŒλŸ¬λ¦¬μ— 쒋은 μΆ”κ°€ κΈ°λŠ₯이 될 것이라고 μƒκ°ν•©λ‹ˆλ‹€.)

νŽΈμ§‘: #38은 κ΅¬ν˜„ 및 패치 등에 λŒ€ν•΄ μ„€λͺ…ν•©λ‹ˆλ‹€. μ‹€μ œλ‘œ 이것을 λ‹«κ³  κ΅¬ν˜„ μ‹œ κ°€λŠ₯ν•œ 경우 μ»¨ν…μŠ€νŠΈ κ΄€λ¦¬μžλ‘œ νŠΈλ¦¬κ±°ν•  수 μžˆμ–΄μ•Ό ν•œλ‹€λŠ” 점에 μœ μ˜ν•˜λŠ” 것이 κ°€μž₯ μ’‹μŠ΅λ‹ˆλ‹€.

μš°λ¦¬κ°€ μ»¨ν…μŠ€νŠΈμ— λ“€μ–΄κ°€κ±°λ‚˜ μ»¨ν…μŠ€νŠΈλ₯Ό λ– λ‚˜κ±°λ‚˜ 더 λ‚˜μœ μ—¬λŸ¬ μˆ˜μ€€μ˜ μ»¨ν…μŠ€νŠΈλ₯Ό κ΅¬ν˜„ν•˜λ„λ‘ κ΅¬ν˜„ν•˜λŠ” 것이 κΉŒλ‹€λ‘­λ‹€λŠ” 데 μ „μ μœΌλ‘œ λ™μ˜ν•©λ‹ˆλ‹€.

EDIT κ΄€λ ¨: 이 κΈ°λŠ₯을 μ‚¬μš©ν•˜λŠ” 데 더 κ°€κΉŒμ΄ λ‹€κ°€κ°€λŠ” 것은 무엇이든 쒋은 μƒκ°μž…λ‹ˆλ‹€.

μ§€κΈˆμ€ μ„ΈλΆ€ 사항을 μœ μ§€ν•˜κΈ° μœ„ν•΄ 이것을 μ—΄μ–΄ λ‘‘λ‹ˆλ‹€. 1.4에 ν• λ‹Ήν–ˆμ§€λ§Œ μžŠμ§€ μ•ŠμŠ΅λ‹ˆλ‹€. κΈ°νšŒλŠ” λ‚΄κ°€ #38을 ν•˜λŠ” λ™μ•ˆ λ°”λ‘œ 이것을 λ…Έν¬ν•˜λ €κ³  ν•  κ²ƒμž…λ‹ˆλ‹€. λ§ˆμŠ€ν„°κ°€ 되면 μ—¬κΈ°μ—μ„œ μ—…λ°μ΄νŠΈν•˜κ² μŠ΅λ‹ˆλ‹€. κ°μ‚¬ν•©λ‹ˆλ‹€.

이것은 μ‹€μ œλ‘œ #38κ³Ό 관련이 μ—†μŠ΅λ‹ˆλ‹€. κ·Έ λ³€κ²½ 사항은 SSH 연결을 톡해 μΆ”κ°€ 포트λ₯Ό ν„°λ„λ§ν•˜λŠ” 것이 μ•„λ‹ˆλΌ SSH νŠΈλž˜ν”½ 자체λ₯Ό κ²Œμ΄νŠΈμ›¨μ΄ν•˜λŠ” 것에 κ΄€ν•œ 것이기 λ•Œλ¬Έμž…λ‹ˆλ‹€. 이λ₯Ό μœ„ν•΄μ„œλŠ” λ‹€λ₯Έ(λ˜λŠ” μ΅œμ†Œν•œ μΆ”κ°€) μ†”λ£¨μ…˜μ΄ ν•„μš”ν•©λ‹ˆλ‹€. μ§€κΈˆμ€ νŽ€νŒ… μ€‘μž…λ‹ˆλ‹€. μ£„μ†‘ν•©λ‹ˆλ‹€.

μ €λŠ” μ΅œκ·Όμ— ν¬νŠΈμ— 직접 μ—°κ²°ν•  수 μ—†λŠ” 원격 rsync μ„œλ²„μ™€ λ™κΈ°ν™”ν•˜κΈ° μœ„ν•΄ 이 κΈ°λŠ₯이 ν•„μš”ν–ˆκ³  paramiko의 forward.py 데λͺ¨ μ½”λ“œμ— μ‚¬μš©ν•  수 μžˆλŠ” μƒ˜ν”Œ μ½”λ“œκ°€ μžˆλ‹€λŠ” 것을 μ•Œκ²Œ λ˜μ–΄ μ €μ—κ²Œ 잘 λ§žλŠ” μ†”λ£¨μ…˜μ„ μ°Ύμ•˜μŠ΅λ‹ˆλ‹€. μ—¬κΈ°μ—μ„œ forward.py에 λŒ€ν•œ 패치둜 μ œμΆœν–ˆμŠ΅λ‹ˆλ‹€: https://github.com/paramiko/paramiko/pull/504/

ν•΄λ‹Ή νŒ¨μΉ˜μ—μ„œ ForwardServer λ₯Ό μΆ”κ°€ν•˜κ³  ForwardServer 의 μΈμŠ€ν„΄μŠ€λ₯Ό λ‹¨μˆœνžˆ λ°˜ν™˜ν•˜λŠ” local_tunnel() λ₯Ό κ°€μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€. pull request에 λŒ€ν•œ @bitprophet 의 ꢌμž₯ 사항에 따라 Fabric용 패치 μž‘μ—…μ„ μ§„ν–‰ν•©λ‹ˆλ‹€.

λ‚˜λŠ” μ‹€μ œλ‘œ 깨닫지 λͺ»ν–ˆμ§€λ§Œ local_tunnel() 에 λŒ€ν•œ νŒ¨μΉ˜κ°€ 이미 μžˆμ§€λ§Œ μƒνƒœμ— λŒ€ν•΄ μ™„μ „νžˆ ν™•μ‹ ν•  μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€. μ–΄λ–»κ²Œ ν•΄μ•Ό ν•˜λ‚˜μš”?

@haridsv κ°€λŠ₯ ν•˜λ‹€λ©΄ ν•΄λ‹Ή 패치(#939)μ—μ„œ ν…ŒμŠ€νŠΈν•˜κ³  μ„±κ³΅μ μœΌλ‘œ μ‚¬μš©ν–ˆλ‹€κ³  μ–ΈκΈ‰ν•˜λ©΄ ​​도움이 될 κ²ƒμž…λ‹ˆλ‹€. 그렇지 μ•ŠμœΌλ©΄ 인내심을 κ°€μ§€μ„Έμš” :) κ°μ‚¬ν•©λ‹ˆλ‹€!

이 문제λ₯Ό ν•΄κ²°ν•  κ³„νšμ΄ μžˆμŠ΅λ‹ˆκΉŒ? 이 문제λ₯Ό ν•¨κ»˜ ν•΄κ²°ν•˜λŠ” 두 개의 λ―Έν•΄κ²° pull μš”μ²­μ΄ μžˆμ§€λ§Œ κ²€ν† λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆκΉŒ? 속도λ₯Ό 높일 수 μžˆλŠ” 방법이 μ—†μ„κΉŒμš”?

939, #1218

λ¬Έμ œμ—†μ΄ #1218의 μ½”λ“œλ₯Ό μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

939λŠ” μ—¬μ „νžˆ 릴리슀 버킷에 있으며 _일뢀_ ν•­λͺ©μ„ μž˜λΌμ•Ό ν–ˆκΈ° λ•Œλ¬Έμ— 곧 μΆœμ‹œλ  1.11μ—μ„œ νŽ€νŠΈν–ˆμ§€λ§Œ λ‹€μŒ κΈ°λŠ₯ μ£ΌκΈ°μ—μ„œλŠ” μš°μ„  μˆœμœ„λ₯Ό κ°–κ²Œ λ©λ‹ˆλ‹€. (그리고 #1218이 #939λ₯Ό λŒ€μ²΄ν•˜λŠ” κ²ƒμ²˜λŸΌ λ³΄μ΄λ―€λ‘œ λ‚˜λŠ” μ•„λ§ˆλ„ 그것을 λ³‘ν•©ν•˜κ³  λ³€κ²½ λ‘œκ·Έμ— #939λ₯Ό κΈ°λ‘ν•˜κ²Œ 될 κ²ƒμž…λ‹ˆλ‹€.)

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰