반응형
반응형

요즘 플레이하는 게임마다 간단하게 매크로를 하나씩 만들어보고 있다.

기존에 잘 써먹던 Autohotkey 같은 경우, 워낙 많이 알려져있기 때문에 PC 클라가 뜨면서 보안프로그램이 같이 떠버리면 어뷰저 (악용 유저)로 분류가 되기 마련이다. (N사 게임들이 특히 그렇다)

 

하지만, 게임사도 win32 API인 SendMessage, PostMessage는 막을 수가 없기 때문에, 이것들을 활용해보았고, 그 결과 잘 되는 것을 확인하였다.

왜 못막냐고? 저것들을 막아버리면 PC 클라로 들어오는 모든 이벤트를 막는 것이기 때문에, 일반적인 키보드 / 마우스도 사용할 수가 없기 때문이다.

 

물론 C로 쌩짜로 짜면 좋겠지만, 간단하게 python으로 구현을 해보았고, win32gui, win32con 패키지 정도만 있으면 쉽게 구현가능하다.

 

요즘 하는 게임에서 필요한 기능은 자동 사냥은 일단 제공을 하고 있고, 자동 스킬까지 제공하는 훌륭한 게임이지만, 일정주기마다 특정 키를 눌러줘야 자동 사냥의 효율성이 더 올라가고, 물약도 적게 먹기 때문에, 난 30초마다 내가 숨겨둔 PC클라에 특정 키를 입력해주는 기능을 구현하려고 한다.

 

아래 소스는 내가 플레이하는 게임창을 찾아서, 특정 시간마다 Z 키를 누르는 기능을 수행한다.

import time
import win32gui
import win32con

class DiabloByebye:

    def __init__(self):        
        self.win_title_name = "찾고자 하는 창의 타이틀명 적어준다. (winspy로 찾을 수 있음)"
        self.handle = win32gui.FindWindow(None, self.win_title_name)
        print(self.handle) # 여기서 0 찍히면 타이틀명 잘못 찾은거임
        
    def start(self):
        while True:                        
            win32gui.SendMessage(self.handle, win32con.WM_KEYDOWN, ord('Z'), 0)
            time.sleep(0.1)
            win32gui.SendMessage(self.handle, win32con.WM_KEYUP, ord('Z'), 0)
            time.sleep(30)
 
if __name__== "__main__":  
    DiabloByebye().start()

 

클래스명은 최근 영정당한 Diablo에게 인사하는 이름으로 해보았다.

키보드 이벤트를 후킹해서, 시작 / 중지 / 종료 등도 다양하게 구현이 가능하다.

 

반응형
,
반응형

사실 조용히 쓰고 있었고, 다른 사람보다 열심히 쓰진 않았다고 생각하는데 영구정지를 당한김에, 개발 블로그에 AutoHotkey로 매크로를 만드는 법에 대해 안내해보려고 한다. (어찌됐든 AutoHotkey도 개발의 일종이다! 사실 더 많이 쓴 사람은 영정 안시키고, 내가 당해서 열받은 것도 쪼끔있음)

 

일반 AutoHotkey란, Windows에서 사용되는 Click이라던지 Mouse 이동이라던지 사용자가 GUI 환경에서 손으로 할 수 있는 모든 동작들을 예약된 간단한 명령어를 이용하여 컴퓨터가 동작시킬 수 있도록 하는 것을 의미한다.

그렇기 때문에, 프로그래밍 경험이 없는 사람들도 눈치만 있으면, 간단한 자동 클릭 매크로 정도는 만들 수 있고, 프로그래밍 업계에서 일했던 사람이라면, 창이 완전히 내려가 있는 상태에서도 사람이 누르는 것처럼 만들 수 있다.

 

기능이 워낙 많기 때문에, 내가 만들었던 로직에 대해 간단히 설명과 주석을 달아둘거고, 그 외 응용은 아래 홈페이지를 참고하면 간단히 업그레이드 할 수 있음

https://www.autohotkey.com/docs/AutoHotkey.htm

 

Quick Reference | AutoHotkey

 

www.autohotkey.com

 

본인이 메테오 법사를 했어서, 그거에 특화되게 만들어봤으니 응용해서 쓰길 바라고, 소스 짠 다음에 컴파일은 구글링 조금만 해봐도 아주 쉬워서 따로 안내 안함

Gui, Add, Button, x10 y20 w100 h30 gStart, 시작   ; 창에 시작 버튼 표시하고, 클릭 시 Start: 이후에 명령어를 실행한다.
Gui, Add, Button, x120 y20 w100 h30 gStop, 중지   ; 창에 중지 버튼 표시하고, 클릭 시 Stop: 이후에 명령어를 실행한다.
Gui, Show, w240 h80, Dia   ; Gui를 통해 그린 버튼들을 화면에 보여준다. 240*80 크기로
return ; 구문 한 묶음 당 필수 구문이니 넣어주도록 하자.

GuiClose:      ; 창 닫았을 때 동작하는 Event 
ExitApp        ; 난 창 닫았을 때 매크로가 종료되도록 하고 싶어서, 이 구문을 넣었다.

Start:         ; 시작 버튼 눌렀을 때 이리로 온다.
Settimer, potion, 60000, On, 1     ; 포션 빠는거 60000ms (60초) 마다 1순위로 실행하게 할거임
Settimer, skill_meteor, 10000, On, 2  ; 메테오는 10초마다 2순위로 실행하게 할거임
Settimer, skill_3, 7000, On, 3  ; 스킬 3번 버튼은 7초마다 3순위로 쓰고 싶어

Loop        ; 반복문 : 스킬만 쓰면 캐릭터가 멍하니 서서 스킬만 쓰니까, 0.3초마다 평타 치고 싶어 (난 평타를 z로 설정했는데, 다른 키면 바꿔도 돼)
{	
	ControlSend,, {shift down}z{shift up}, Diablo Immortal	 ; 시프트 누르고 z 누르고 시프트 풀어, Diablo Immortal 창 이름을 가진 곳에서
	sleep, 300  ; 이 구문이 없으면 컴퓨터가 뻗을 수 있으니, 0.3초 쉬면서 반복하자
}
return  ; 이벤트 구문 하위에 넣어주자

Stop:    ; 중지 버튼 눌렀을 때 이리로 온다.
Pause    ; 모든 동작 중지해
return   ; 이벤트 구문 하위에 넣어주기

potion:  ; 포션 동작 이벤트 구문
ControlSend,, q, Diablo Immortal    ; q를 누를건데, Diablo Immortal 이라는 창에서 누를거야
return   ; 이벤트 구문 하위에 넣어주기

skill_meteor:   ; 메테오 이벤트 구문
Critical       ; 메테오는 동작이 길어서, 이 구문을 넣어주어야 다른 동작에 영향을 받질 않아
ControlSend,, 4, Diablo Immortal   ; 4번 버튼에 있는 갑옷 시전해
sleep, 1000   ; 다음에 2번에 넣어둔 메테오 시전할거고, 너무 빨리 누르면 키가 씹히니까 1초 쉬어
ControlSend,, 2, Diablo Immortal ; 2번 버튼에 넣어둔 메테오 시전해
sleep, 1000   ; 마찬가지로 1초 쉬었다가 비전바람 쓸거야
ControlSend,, 1, Diablo Immortal  ; 1번에 넣어둔 비전바람으로 메테오 쓴 곳에 불 질러
sleep, 1000   ; 마찬가지로 1초 쉬었다가 비전바람 한 번 더 쓸거야
ControlSend,, 1, Diablo Immortal  ; 1번에 넣어둔 비전바람으로 메테오 쓴 곳에 불 질러
return   ; 이벤트 구문 하위에 넣어주기

skill_3:     ; 이거 번개 파장? 이었나 영정돼서 기억이 안나는데 그 퍼졌다가 돌아오는 스킬이야
ControlSend,, 3, Diablo Immortal   ; 3번 버튼 눌러
return ; 이벤트 구문 하위 기억하지?


F8::     ; 매크로 창에 시작 버튼이 있지만, 직접 누르기 귀찮아, F8로 실행 가능하도록 넣은 구문
Goto, Start   ; Start: 이후 구문 실행할거야
return    ; 이것도 이벤트 구문 하위니까 return 넣자

F9::    ; 중지도 직접 누르기 귀찮아, F9로 실행되도록 넣자
Pause   ; 모든 동작 중지, 다시 한 번 누르면 재개
return  ; 이벤트 구문 하위

F10::   ; 이거 우리 불멸단이라 금고 가려면 광클 필요해, 그래서 F10누르면 광클되게 해봤어
while GetKeyState("F10", "T")   ; F10 누르면 왼쪽 마우스 버튼을 커서 위치에서 0.01초마다 눌러!, 다시 누르면 중지해
{
    MouseClick, left
	sleep, 10
}
return ; 이벤트 구문 하위야

F12::   ; F12로도 종료할 수 있어
ExitApp

 

일단 이거 앱 플레이어가 아니고, 배틀넷 런처의 PC 버전에서 비활성화 형태로 동작하지만, 구조상 마우스까지 후킹할 순 없어서, 마우스는 위치해둬야 함

(매크로는 마우스 커서 위치 기준으로 동작한다고 보면 되고, 듀얼 모니터 쓰는 사람은 슬쩍 옆 모니터로 커서 넘기면, 돌리면서 다른 거 할 수 있음, 비활성 윈도우 이벤트의 묘미)

 

퍼갈땐 꼭 댓글로 출처 명시해주길 바라고, 궁금한 점은 댓글 달아주면 확인 가능한 시간에 답변 드림

반응형
,
반응형

이번 주에 단자함에 공유기 하나를 넣음으로써, 드디어 홈 네트워크가 완성되었다.

이제 우리 집의 IPTV를 제외한 모든 장비는 공유기 하나에서 DHCP로 내려주는 Private IP로 유/무선 모두 접근이 가능해졌는데, DNS의 경우 무료 DNS인 duckdns.org를 가져다 쓰고 있었고, 결국 NAT IP타고 내부 네트워크로 들어오기 때문에, 현재 상황은 도메인으로 접근 시 내부 -> 외부 -> 내부와 같이 비효율적인 통신 환경이 만들어진다.

 

DNS 쿼리 시에도 private ip를 가져올 수 있도록 하려면, 공유기에 자체 구축한 DNS 서버를 연결하면 해결이 된다. 물론 장비가 많지 않은 경우면 그냥 개별 장비에 hosts에 박아서 쓰면 되지만, 완벽한 방법은 아니라고 생각한다.

 

결론으로 DNS 서버 구축을 위해 여러 솔루션들을 찾아봤는데, Technitium 이라는 DNS 서버가 간단하게 docker image 올리고, config 정도만 volume으로 연결해두면, Admin 페이지를 통해 각종 세팅을 할 수 있도록 제공을 하고 있었다.

docker hub에서도 100개가 넘는 STAR를 받았고, 업데이트도 자주 해주어서, 이걸로 해보는 것으로 결정!

 

https://hub.docker.com/r/technitium/dns-server 에 작성된 README를 읽다보면, docker 설치 방법에 친절하게 docker-compose.yml까지 제공을 해준다.

 

https://github.com/TechnitiumSoftware/DnsServer/blob/master/docker-compose.yml

 

GitHub - TechnitiumSoftware/DnsServer: Technitium DNS Server

Technitium DNS Server. Contribute to TechnitiumSoftware/DnsServer development by creating an account on GitHub.

github.com

그대로 복붙하면, 컨테이너가 뜨고, 5380 포트로 admin 페이지에서 이것저것 세팅을 조정할 수 있다.

 

본인 같은 경우는, duckdns.org 관련 도메인을 입력하면 사설 IP가 반환되기를 원했기 때문에, 아래와 같이 ZONE을 먼저 추가를 해주었고, A 레코드만 사설 IP로 입력하여 사용하고 있다.

 

이제 공유기의 WAN 설정 쪽으로 가서 DHCP에 지금 세팅한 DNS 서버의 IP를 넣어주면, 유 / 무선 기기에 DNS 쿼리 시 지금 세팅한 DNS 서버를 바라보게 된다.

(DNS 서버 구축 한 장비가 원격에 있는 경우 53번 포트 TCP / UDP를 열어야 한다.)

 

router.asus.com도 가끔 오락가락 하길래, 192.168.0.1로 아예 박아넣었더니 이후에 못찾는 일이 없어졌다.

실무 환경에서도 써먹으면 좋을만한 Technitium 추천!

 

혹시 DNS 쿼리가 잘 안되는 분들을 위해.. 일반적인 DNS 같은 경우 3600초를 Default로 TTL (캐싱으로 이해하면 쉬움)이 지정되어 있어서, 즉시 이용이 필요한 경우 아래와 같은 방법으로 DNS를 Flush 해주어야 한다.

Windows

cmd창을 열고 ipconfig /flushdns를 입력한다.

 

MAC

터미널을 열고, sudo dscacheutil -flushcache;sudo killall -HUP mDNSResponder 입력한다.

 

모바일 기기

wifi off후 on하고 다시 연결

반응형
,
반응형

개요

최근 Oracle Cloud의 서울 리전에 드디어 인스턴스 생성을 완료해서, Plex Media Server를 설치하고, 구글 드라이브와 연동을 해서 어디서든 스트리밍할 수 있는 환경을 만들어보기로 했다.

마침 지난 번 우회 결제로 Life Time Pass도 있는 상태라, 그 계정에 서버를 붙이기만 하면 되는 상황이라 Plex Media Server 설치를 먼저했고, 로그인을 했는데 자꾸 새로 설치한 Plex 셋업 페이지로는 가지 않고, 기존 Plex 서버로만 리다이렉션이 되어, 서버를 추가할 수가 없었다.

왜 그런가 구글링을 좀 해보니.. 동일 네트워크에서 Plex를 이용한 이력이 있는 경우 이슈가 되는 거라고 했다. (사실 이해는 좀 안됨..)

해결책을 찾아보니, Plex Port (32400)를 SSH 터널링을 이용해서 다른 포트로 로컬 포트에 띄워서, 접근하면 다른 네트워크로 인식되어, 세팅에 이슈가 없다고 하더군.. 

아래와 같은 절차로 따라해보기로 했다.

 

해결

일단 오라클 클라우드에 SSH 접근을 하려면, private key가 필요하니 로컬에 준비해두도록 하고, 일반적으로 Windows 환경에서 SSH 명령어를 기본 지원하진 않으므로, Git bash도 설치해서 준비해주자.

 

준비가 끝났으면, Git bash를 열고 아래와 같은 키워드로 터널링을 해주자.

아래 명령어는 원격 서버에 SSH로 붙어 있는 동안, 원격 서버에 떠있는 32400 포트를 로컬 환경에서 8888 포트로 붙게 해준다.

$ ssh -i ssh-key.key ubuntu@서버 IP -L 8888:localhost:32400

 

이렇게 해두고, http://localhost:8888로 붙어주면, 동일하게 로그인 절차를 거치지만 Plex Media Server의 Setup 절차로 이동할 수 있게 되고, 기존에 사용하던 Plex계정인 경우 서버가 하나 추가되어, Plex 계정 하나로 여러개의 Plex Media Server를 관리할 수 있게 된다!

반응형
,
반응형

최근 뭐때문인진 모르겠지만, 갑자기 전기세가 많이 나오고 있어서, 집에서 관리중인 서버도 자는 시간에는 rtcwake를 이용하여 절전모드로 해두고, 혹시나 긴급하게 봐야할 경우에는 wol을 이용하여 제어하는 것으로 계획을 세웠다.

 

rtcwake

  • 자는 시간이 00시부터 08시정도 이므로, 자정에 8시간동안만 절전을 활성화하면 되기 때문에 crontab을 사용하면 된다.
  • 0 0 * * * /usr/sbin/rtcwake -m mem -s 28800

 

wol (wake on lan)

  • 일단 서버가 연결되어 있는 공유기에서 wol을 지원해야 하고, 랜카드에서도 wol을 지원하는지 확인해야 한다.
  • 공유기는 모델명을 확인하여, 각 제조사 사이트에서 찾아봐야 하며, 랜카드의 경우 하드웨어에서는 지원한다고 해도, OS단에서 disable 되어 있는 경우가 있다.
  • 먼저 ifconfig 를 이용하여, 내 랜카드가 어떤 것인지 확인하고, ethtool 명령어를 아래와 같이 입력하여 wol이 설정되어 있는지 본다. 아래에서는 enp3s0이 내 랜카드라고 가정하였고, wol을 지원하고 있다면, Wake-on 란이 g 일것이고, 지원하지 않으면 d일 것이다.)
    • $ /sbin/ethtool enp3s0 
      
      #
      Settings for enp3s0:
              Supported ports: [ TP MII ]
              Supported link modes:   10baseT/Half 10baseT/Full 
                                      100baseT/Half 100baseT/Full 
                                      1000baseT/Full 
              Supported pause frame use: Symmetric Receive-only
              Supports auto-negotiation: Yes
              Supported FEC modes: Not reported
              Advertised link modes:  10baseT/Half 10baseT/Full 
                                      100baseT/Half 100baseT/Full 
                                      1000baseT/Full 
              Advertised pause frame use: Symmetric Receive-only
              Advertised auto-negotiation: Yes
              Advertised FEC modes: Not reported
              Link partner advertised link modes:  10baseT/Half 10baseT/Full 
                                                   100baseT/Half 100baseT/Full 
                                                   1000baseT/Half 1000baseT/Full 
              Link partner advertised pause frame use: No
              Link partner advertised auto-negotiation: Yes
              Link partner advertised FEC modes: Not reported
              Speed: 1000Mb/s
              Duplex: Full
              Port: MII
              PHYAD: 0
              Transceiver: internal
              Auto-negotiation: on
              Supports Wake-on: pumbg
              Wake-on: g
              Current message level: 0x00000033 (51)
                                     drv probe ifdown ifup
      #
  • 만약 Wake-on이 d로 되어 있다면 아래 명령어로 활성화 후 다시 확인해본다.
    • $ /sbin/ethtool -s enp3s0 wol g
  • 다만, 이렇게 명령어로 설정한 경우 재부팅 시에는 적용이 되지 않기 때문에, /etc/network/interface 파일을 열어서 두 줄을 추가해주어야 한다.
    • $ vi /etc/network/interface
      
      # 가장 하단에 아래 두 줄 추가
      post-up /sbin/ethtool -s enp3s0 wol g
      post-down /sbin/ethtool -s enp3s0 wol g

 

반응형
,
반응형

우선 아래의 블로그에서 많은 도움을 받았다.

lifeinprogram.tistory.com/18

 

MacOS에서 시스템 폴더에 접근하기 / 시스템 무결성 보호(SIP)/ Operation not permitted / csrutil disable / csru

MacOS 에서 시스템 폴더에 접근하여 파일을 생성하거나 디렉토리를 만들려고 하니 "Operation not permitted" 라는 메세지가 뜨면서 실행이 안됩니다. MacOS 에서 시스템 폴더에 접근하여 파일을 생성하

lifeinprogram.tistory.com

 

관리하는 Mac이 Ruby / Gem으로 패키지를 관리하는데, gem install / bundle update 든 하려고 하면, 계속 /usr/bin 하위에 권한이 없다고 뱉어내는 현상이 있어서, 일단 가장 먼저 찾아지는 SIP를 Recovery Mode로 진입해서 꺼보았다.

 

그런데도 뭔가 해결이 안되는 느낌이 있었는데, mount를 이용해서 Write 권한까지 주어야 하는 것인줄은.. 저 블로그에서 알게되었음.

 

이거 한줄로 모든게 해결이 되었다.

$ sudo mount -uw /

 

왠지 그동안 문제 있던 것들도 다 이 문제가 아니었나 싶을 정도로, 업데이트 / 설치 모두 깔끔!

xcode를 이용한 빌드 때문에 쓰는거지.. 정말 MAC은 서버용으로는 적합하진 않은 것 같다.

반응형
,
반응형

회사에 보안프로그램이 워낙 많고, ACL 관리가 철저하다보니, 갑자기 관리중인 머신의 SSH 포트와 VNC 포트가 내려가는 참사가 벌어졌다.

 

재택중이라 출근하신 분에게 sshd만 수동으로 올려달라고 부탁했고, 터미널에서 확인해보니 launchctl을 이용해서 sshd가 안올라가는 것으로 확인함..

 

그래서 기존 sshd.plist를 copy해서 내가 필요한 부분만 짤라서 구성해보기로 했다.

 

내 요구사항은 아래와 같았다.

1. ssh 접근이 되어야 함.

2. 장비의 전원을 뽑았다 켜도 ssh 접근이 되어야 함.

 

결론은 아래와 같이 plist를 구성했고, 정상동작하는 것을 확인했다. 

...
<dict>
  <key>Label</key>
  <string>com.sshd.alternative</string>
    <key>RunAtLoad</key>
    <true/>
  <key>Program</key>
  <string>/usr/sbin/sshd</string>
  <key>StandardErrorPath</key>
  <string>/tmp/sshd.alternative</string>
</dict>
...

 

이후 Label에 지정한 string을 이용해서 아래와 같이 컨트롤하면 된다.

$ launchctl start | stop com.sshd.alternative

 

희한한건 보안업데이트 든 뭐든 업데이트하면 원상 복귀됨.. 이유를 알 수 없다. 장비 문제인가?

반응형
,
반응형

사용자 계정으로 잘 돌던 스크립트가, 재부팅 시 서비스를 동작하게 하기 위해 root로 계정을 옮겼더니,

fastlane unlock-keychain 동작 시 키체인을 못찾겠다고 에러를 뱉었다.

 

인증서 자체를 기존 사용자 계정의 키체인에 등록했기 때문에, 당연한 결과라고 생각했고,

root에 인증서를 등록하는 것은 미련한 행동이라 생각하여, unlock-keychain에 argument가 없을지 검색해보았다.

 

역시나 있었다!

docs.fastlane.tools/actions/unlock_keychain/

 

unlock_keychain - fastlane docs

unlock_keychain Unlock a keyc

docs.fastlane.tools

 

path에다가 원래 등록했던 keychain의 경로를 명시해주면 된다.

대략 아래와 같은 경로다.

# Fastfile
...
unlock_keychain(
  path: '/Users/xxx/Library/Keychains/login.keychain-db',
  password: 'abcde12'
)
...

 

바꿔주니 잘 되는군!

반응형
,
반응형

homebrew를 통해서 jenkins를 설치했고, 빌드 머신이 될 놈이기 때문에, 리부팅이 되어도 문제 없도록 만들어야하는 니즈가 있다.

 

homebrew를 이용하면 아래와 같은 명령어로 손쉽게 시작 / 중지 / 재시작이 가능하고,

내부적으로 launchd를 활용해서 부팅 후 로그인 시 서비스 재시작도 어느정도 관리를 해준다.

# 서비스 시작
$ brew services start jenkins-lts

# 서비스 중지
$ brew services stop jenkins-lts

# 서비스 재시작
$ brew services restart jenkins-lts

 

근데 내가 필요한건, 머신이 재부팅 된 후에, 유저 로그인을 하지 않아도 리눅스처럼 서비스가 동작하는 것이 목표였다.

 

여러 자료를 찾아보니, MAC에는 LaunchAgents와 LaunchDaemons라는 놈들이 있는데..

Homebrew에서 제공하는 brew services 키워드의 경우 일반 유저로 서비스 실행 시 LaunchAgents라는 놈을 이용하고,

root 권한을 획득한 후에 실행하면 LaunchDaemons라는 놈을 이용하는 것으로 보였다.

 

이 두 개의 차이는 뭐일까?

 

LaunchAgents라는 놈의 경우 서비스를 재시작 해주긴하지만, 유저가 로그인했을 경우(ssh를 통한 로그인은 해당이 안됨)에 약속된 서비스를 재시작 해준다.

 

LaunchDaemons라는 놈은 우리가 흔히 알고 있는 리눅스에서의 서비스 처럼, 머신이 재부팅되어도 재시작을 해준다.

 

결론은 아래와 같은 명령어를 이용하면, 내가 원한 방향이 만들어지게 된다.

# 서비스 시작
$ sudo brew services start jenkins-lts

# 서비스 중지
$ sudo brew services stop jenkins-lts

# 서비스 재시작
$ sudo brew services restart jenkins-lts

 

하지만... 귀찮은 일이 하나 남았다.

 

서비스 실행하는 계정 자체가 변경이 되었기 때문에, jenkins처럼 유저별로 데이터를 저장하는 특성이 있는 경우,

이를 옮겨주어야 한다. (아.. 이런거 때문에 역시 docker를 써야해;;)

 

MAC 장비 스펙이 낮아서 standalone으로 설치를 해보았는데, 사실 docker를 쓰면 고민할 필요가 없는 문제이긴하다.

 

그 와중에 다행인건, 기존에 쓰던 유저 하위의 .jenkins 폴더 내용을 통째로, root로 복사했더니 잘 동작한다!

반응형
,
반응형

본인은 일반적으로 업무환경이 Windows PC가 주가 되고, OSX가 설치된 장비는 빌드머신 혹은 R&D용도로 사용을 하는 편이다. 

 

그렇기 때문에, 자주 파일 / 폴더 등을 옮겨야하는데, 사내 보안이 워낙 엄청나게 철저하기 때문에, 메일 등을 이용해서 하나하나 손수 옮기곤 하다보니, 자괴감이 들던 중 아래와 같은 생각을 하게 됨.

 

1안 : MAC에 smb 서버를 올려볼까?

2안 : 윈도우에 공유폴더 생성하고, MAC에서 mount해서 쓰면 굳이 옮길 필요가 없지 않을까?

 

2안이 좀 더 간단해보여서 시도해보았고, mac에서 mount 관련 명령어를 다양하게 제공하고 있어서, 충분히 가능하였다.

 

아래와 같은 절차로 진행하면 됨.

 

1. 윈도우 환경에서 OSX와 동기화할 폴더 하나를 공유폴더로 생성하고, 특정 유저가 접근할 수 있도록 만든다.

(이건 검색하면 많이 나오므로 과정은 생략)

 

2. 맥에서 터미널을 이용하여 해당 폴더를 Mount한다.

// 패스워드에 특문이 포함된 경우 escape가 필요하다. (url encoding 형태면 적합)
$ mount_smbfs //{계정}:{패스워드}@WindowsPC명/경로 OSX경로

 

이제 MAC이든 Windows든 해당 폴더에만 파일을 두면, 어디서든 접근할 수 있게 되었다. (편안)

 

재부팅하면 왠지 풀릴거 같은데, 리눅스처럼 /etc/fstab 같은게 있지 싶은데, MAC을 끌일이 거의 없으므로 이건 일단 패스

반응형
,
반응형